@@ 2,6 2,8 @@ import { TeamSpeak, QueryProtocol } from "ts3-nodejs-library";
import { GraphQLClient, gql } from "graphql-request";
import dotenv from "dotenv";
+type Variables = { [key: string]: any };
+
dotenv.config();
const teamspeak = new TeamSpeak({
@@ 34,6 36,12 @@ teamspeak.on("textmessage", (ev) => {
case "!hello":
message(clid, "Hello " + ev.invoker.nickname);
break;
+ case "!elo":
+ elo(clid, teamspeakID);
+ break;
+ case "!register":
+ register(clid, teamspeakID, argv[1]);
+ break;
}
});
@@ 41,12 49,68 @@ function message(clid: string, msg: string) {
teamspeak.sendTextMessage(clid, 1, msg);
}
-async function request(query: string): Promise<string> {
+async function request(query: string, variables: Variables): Promise<any> {
const endpoint = process.env.ENDPOINT!;
const graphQLClient = new GraphQLClient(endpoint, {
headers: {},
});
- const data = await graphQLClient.request(query);
+ const data = await graphQLClient.request(query, variables);
return data;
}
+
+async function elo(clid: string, teamspeakID: string) {
+ const query = gql`
+ query ($teamspeakID: String!) {
+ userByTS(teamspeakID: $teamspeakID) {
+ elo
+ }
+ }
+ `;
+ const variables = { teamspeakID: teamspeakID };
+
+ try {
+ const data = await request(query, variables);
+ message(clid, "Elo: " + data.userByTS.elo);
+ } catch (e) {
+ const error = JSON.parse(JSON.stringify(e)).response.errors[0].message;
+ switch (error) {
+ case "no result":
+ message(clid, "You are not registered with this teamspeakID.");
+ break;
+ default:
+ console.error(error);
+ break;
+ }
+ }
+}
+
+async function register(clid: string, teamspeakID: string, steamID: string) {
+ const mutation = gql`
+ mutation ($steamID: String!, $teamspeakID: String!) {
+ createUser(input: { steamID: $steamID, teamspeakID: $teamspeakID })
+ }
+ `;
+ const variables = { teamspeakID: teamspeakID, steamID: steamID };
+
+ try {
+ const data = await request(mutation, variables);
+ message(clid, "Registered successfully.");
+ } catch (e) {
+ const error = JSON.parse(JSON.stringify(e)).response.errors[0].message;
+ switch (error) {
+ case "not unique":
+ message(
+ clid,
+ "You are already registered with this teamspeakID or steamID. Please contact an administrator if you believe that this is an error."
+ );
+ break;
+ case "wrong steamID64":
+ message(clid, "You entered a wrong steamID64.");
+ break;
+ default:
+ console.error(error);
+ break;
+ }
+ }
+}