public static string Talk(string msg) { try { var msgTask = cleverBotSession.SendAsync(msg); msgTask.Wait(); return(msgTask.Result); } catch (Exception e) { Bot.NotifyDevs(Supporter.BuildExceptionMessage(e, "Talk()", msg)); return("The Cleverbot-API is currently unavailable."); } }
public void Start() { _client = new DiscordClient(); _client.Log.Message += (s, e) => Console.WriteLine($"[{e.Severity} - {DateTime.UtcNow.Hour}:{DateTime.UtcNow.Minute}:{DateTime.UtcNow.Second}] {e.Source}: {e.Message}"); CleverbotSession session = null; _client.UsingCommands(x => { x.PrefixChar = '+'; x.AllowMentionPrefix = true; x.HelpMode = HelpMode.Public; }); char p = '+'; // var sepchar = Path.DirectorySeparatorChar; string topic = "Ready to play a Mini TWOW!"; _client.GetService <CommandService>().CreateCommand("botok") //create command .Alias("ping", "status") // add some aliases .Description("Checks if the bot is online.") //add description, it will be shown when +help is used .Do(async e => { if (IsMTWOWChannel(e.Server.Id, e.Channel.Id)) { await e.Channel.SendMessage($"bot is online \ud83d\udc4c"); } }); _client.GetService <CommandService>().CreateCommand("kill") //killswitch .Alias("shutdown") .Description("Shuts down the bot if correct parameter is given") .Parameter("keyword", ParameterType.Multiple) .Do(e => { string keyhash = "0a7a27bedd1f822ac176d55217c0cdc9e8573f173d2b1a525e3607a7614a29b7"; try { if (e.Channel.IsPrivate && sha256_hash(e.GetArg("keyword")) == keyhash) { System.Environment.Exit(1); } } catch { } }); _client.GetService <CommandService>().CreateCommand("prepare") .Alias("setup") .Description("Prepares the current channel for a Mini TWOW.") .Do(async e => { User bot = e.Server.GetUser(_client.CurrentUser.Id); if (bot.GetPermissions(e.Channel).ManageChannel) { if (e.User.GetPermissions(e.Channel).ManageChannel) { Clear("data", e.Server.Id); SaveLine("data", e.Channel.Id.ToString(), e.Server.Id, 1); SaveLine("data", "0", e.Server.Id, 2); SaveLine("data", "null", e.Server.Id, 3); Clear("users", e.Server.Id); //see wiki for dev notes/file layout await e.Channel.Edit(e.Channel.Name, $"{topic}\n{e.Channel.Topic.Replace($"{topic}", "")}", e.Channel.Position); await e.Channel.SendMessage($"This channel is now ready to play Mini TWOWs!"); } else { await e.Channel.SendMessage($"You must have the `MANAGE_CHANNELS` permission to use this command!"); } } else { await e.Channel.SendMessage($"Please give the bot permissions to manage the channel!"); } }); _client.GetService <CommandService>().CreateCommand("create") .Alias("make") .Description("Creates a Mini TWOW game.") .Do(async e => { ulong mtChannel = 000000000000000000; string data = LoadLine("data", e.Server.Id, 1); bool parseResult = ulong.TryParse(data, out mtChannel); if (parseResult) { if (e.Channel.Id == mtChannel && e.Server.GetUser(_client.CurrentUser.Id).GetPermissions(e.Channel).SendMessages) { int gamestatus = 100; data = LoadLine("data", e.Server.Id, 2); bool newParseResult = int.TryParse(data, out gamestatus); if (newParseResult) { if (gamestatus == 0) { SaveLine("data", "1", e.Server.Id, 2); SaveLine("data", e.User.Id.ToString(), e.Server.Id, 3); Clear("users", e.Server.Id); await e.Channel.SendMessage($"You have successfully created a Mini TWOW game! Run `{p}join` to join the game, and run `{p}start` when you're ready to start the game."); } else { await e.Channel.SendMessage($"A game is already running. Please wait for it to finish!"); } } else { await e.Channel.SendMessage($"The data file has been corrupted. Please ask a user with `MANAGE_CHANNELS` perms to do `{p}prepare`."); } } else { // await e.Channel.SendMessage($"Please go to <#{mtChannel}> to start a Mini TWOW!"); } } else { await e.Channel.SendMessage($"Please get a user with `MANAGE_CHANNELS` permissions to run the `{p}prepare` command before starting a Mini TWOW."); } }); _client.GetService <CommandService>().CreateCommand("join") .Description("Joins an active Mini TWOW game.") .Do(async e => { try { if (IsMTWOWChannel(e.Server.Id, e.Channel.Id)) { int gamestatus = 100; string data = LoadLine("data", e.Server.Id, 2); bool parseResult = int.TryParse(data, out gamestatus); if (parseResult) { if (gamestatus == 1) { string[] users = LoadFile("users", e.Server.Id); if (users == null) { string newUsers = $"{e.User.Id.ToString()}\n"; SaveFile("users", newUsers, e.Server.Id); await e.Channel.SendMessage($"You have successfully joined the game."); } bool inGame = false; foreach (string user in users) { ulong userID = 000000000000000000; bool parse = ulong.TryParse(user, out userID); if (parse) { inGame |= userID == e.User.Id; } } if (inGame) { await e.Channel.SendMessage($"You are already in the game!"); } else { string newUsers = users.ToString(); newUsers += $"{e.User.Id.ToString()}\n"; SaveFile("users", newUsers, e.Server.Id); await e.Channel.SendMessage($"You have successfully joined the game."); } } else if (gamestatus == 0) { await e.Channel.SendMessage($"No game is currently running. Type `{p}create` to create a game!"); } else { await e.Channel.SendMessage($"It is too late to join the game!"); } } else { await e.Channel.SendMessage($"The data file has been corrupted. Please ask a user with `MANAGE_CHANNELS` permissions to do `{p}prepare`."); } } } catch (Exception error) { Console.WriteLine($"[ERROR] somethin borked during {p}join: {error.ToString()}"); } }); _client.GetService <CommandService>().CreateCommand("chat") .Description("Talk with the bot") .Parameter("sentence", ParameterType.Unparsed) .Do(async e => { try { if (session == null) { string ChatUser = File.ReadAllLines("logins.txt")[1]; string ChatKey = File.ReadAllLines("logins.txt")[2]; session = await CleverbotSession.NewSessionAsync(ChatUser, ChatKey); } string response = await session.SendAsync(e.GetArg("sentence")); await e.Channel.SendMessage(response); } catch (Exception error) { Console.WriteLine($"[ERROR] An issue occured while trying to +chat: {error.ToString()}"); } }); _client.GetService <CommandService>().CreateGroup("test", cgb => { cgb.CreateCommand("save") .Description("Multi-server data test") .Parameter("data", ParameterType.Unparsed) .Do(async e => { //Save("data", e.GetArg("data"), e.Server.Id, 1); //await e.Channel.SendMessage($"data saved"); await e.Channel.SendMessage($"no"); }); cgb.CreateCommand("load") .Description("Multi-server data test") .Parameter("line", ParameterType.Required) .Do(async e => { try { /* int i = 0; // line number * bool success = int.TryParse(e.GetArg("line"), out i); // output line number to line number * if (success) // check if line number was parsed successfully * { * string data = Load("data", e.Server.Id, i); // run Load with required data * if (data != null) // check if operation was successful * await e.Channel.SendMessage(data); // output line * else if it failed... * await e.Channel.SendMessage("file/line didnt exist"); // ...then say it failed * } * else * { * await e.Channel.SendMessage($"failed to parse input ({e.GetArg("line")})"); // input wasn't an int * }*/ await e.Channel.SendMessage($"no"); } catch (Exception error) { await e.Channel.SendMessage($"error: {error.ToString()}"); } }); }); _client.Ready += (s, e) => { Console.WriteLine($"[{DateTime.UtcNow.Hour}:{DateTime.UtcNow.Minute}:{DateTime.UtcNow.Second}] Connected as {_client.CurrentUser.Name}#{_client.CurrentUser.Discriminator}"); }; _client.ExecuteAndWait(async() => { string token = File.ReadAllLines("logins.txt")[0]; await _client.Connect(token, TokenType.Bot); }); }