public void messageRecieved(SocketUserMessage e, bool retry = true) { try { if (DC == null) { throw new Exception("oops no DC"); } if (DC.CurrentUser == null) { throw new Exception("oops no CurrentUser"); } if ((e.Channel.GetType() != typeof(SocketDMChannel))) { Console.WriteLine("error in the code! Sending non-private messages to PMHandler!"); return; } if (serverSelectCommand(e)) { Console.WriteLine("handled server Select Command"); return; } ulong serverId; if (UserToServerMapping.TryGetValue(e.Author.Id, out serverId)) { VirtualServer curServ; if (servers.TryGetValue(serverId, out curServ)) { var user = curServ.getServer().Users.FirstOrDefault(z => z.Id == e.Author.Id); if (user != null) { Console.WriteLine("accepting PM"); var convertedMsg = new ServerMessage(curServ.getServer(), true, e.Channel, e, user); curServ.messageRecieved(convertedMsg); return; } else { safeSendPM((SocketDMChannel)e.Channel, "You are not part of your set server anymore."); UserToServerMapping.Remove(e.Author.Id); } } else { safeSendPM((SocketDMChannel)e.Channel, "This Bot is not part of your set server anymore."); UserToServerMapping.Remove(e.Author.Id); } } var x = servers.Values.Where(y => y.getServer().Users.FirstOrDefault(z => z.Id == e.Author.Id) != null).ToList(); if (x.Count == 0) { safeSendPM((SocketDMChannel)e.Channel, "Sorry, you are not part of any server this bot is in."); return; } else if (x.Count == 1) { safeSendPM((SocketDMChannel)e.Channel, "Set your server context to " + x[0].getServer().Name + "."); SetUserServerMapping(e.Author.Id, x[0].getServer().Id); //we retry once if (retry) { messageRecieved(e, false); } else { safeSendPM((SocketDMChannel)e.Channel, "There was an issue with setting your server context automatically, please report it to the maintainer."); throw new Exception("Private msg server auto set is looping"); } return; } else { string m = "Please select your channel via \"!selectServer <servername>\" from this list: "; foreach (var s in x) { m += "\n" + s.getServer().Name; } safeSendPM((SocketDMChannel)e.Channel, m); } } catch (Exception except) { Console.WriteLine("Error in PM handling code: " + except); } }
private string proposalList(ServerMessage arg1, string name, string args) { // string msg; return("Sorry, not yet"); }
void bork(ServerMessage e, String m) { var split = m.Split(" ".ToCharArray()); string message = "Unable to comply with command. \n\n bork <mention-target> <emoticon> <on/off>"; Console.WriteLine("Bork cmd got: " + m); if (split.Length == 3 || split.Length == 2) { if (Funcs.validateMentionTarget(e, split[0])) { Emote emote; //string emoji = server.toEmojiString(e, split[1]); IEmote emoji = null; if (Emote.TryParse(split[1], out emote)) { emoji = emote; } else { emoji = new Emoji(split[1]); server.safeSendMessage(e.Channel, split[1] + " is not a server emote, optimistically assuming it works anyway."); } if (emoji != null) { var user = Funcs.GetUserByMentionOrName(e.Server.Users, split[0]); if (user == null) { message = "Could not find user: "******"currently borking " + emoji + " at " + split[0]; } else { message = "no such bork: " + emoji + " at " + split[0]; } } else if (split[2] == "on") { // var x = DC.ClientAPI.Send(new EmojiAddRequest(e.Channel.Id, e.Message.Id, )); // x.Wait(); List <String> individualBorklist; if (!borklist.TryGetValue(userId, out individualBorklist)) { individualBorklist = new List <string>(); borklist.Add(userId, individualBorklist); } if (individualBorklist.Contains(emoji.ToString()) || (emote != null && individualBorklist.Find((ems) => ems.Contains(emote.Id.ToString())) != null)) { message = "Already doing this"; } else { individualBorklist.Add(emoji.ToString()); server.XMlDictSerialization(borklistPath, borklist); message = "Understood, borking " + emoji + " at " + split[0] + " from now on"; } } else if (split[2] == "off") { List <String> individualBorklist; if (!borklist.TryGetValue(userId, out individualBorklist)) { message = "I never did that in the first place"; } else { if (emote != null) { var t = individualBorklist.Find((ems) => ems.Contains(emote.Id.ToString())); if (t != null) { individualBorklist.Remove(t); } } else { individualBorklist.Remove(emoji.ToString()); } if (individualBorklist.Count == 0) { borklist.Remove(userId); } server.XMlDictSerialization(borklistPath, borklist); message = "Understood, no more borking " + emoji + " at " + split[0] + " from now on"; } } } } else { message = "Invalid Emoji: " + split[1]; } } } server.safeSendMessage(e.Channel, message); }
private async Task Cruft() { servers = new Dictionary <ulong, VirtualServer>(); Console.WriteLine("Booting up"); DiscordSocketConfig cfgbld = new DiscordSocketConfig(); // DiscordConfigBuilder cfgbld = new DiscordConfigBuilder(); cfgbld.MessageCacheSize = 100000; Console.WriteLine("WebSocketProvider: " + cfgbld.WebSocketProvider); cfgbld.WebSocketProvider = Discord.Net.Providers.WS4Net.WS4NetProvider.Instance; Console.WriteLine("WebSocketProvider: " + cfgbld.WebSocketProvider); DC = new DiscordSocketClient(cfgbld); PrivateMessageHandler pmHandler = new PrivateMessageHandler(DC, servers); DC.ReactionAdded += async(a, b, reaction) => await Task.Run(() => { if (reaction.Channel is SocketTextChannel) { servers[(reaction.Channel as SocketTextChannel).Guild.Id].reactionAdded(reaction); } }); DC.ReactionRemoved += async(a, b, reaction) => await Task.Run(() => { if (reaction.Channel is SocketTextChannel) { servers[(reaction.Channel as SocketTextChannel).Guild.Id].reactionRemoved(reaction); } }); DC.MessageReceived += async(msg) => await Task.Run(() => { //we ignore our own messages if (msg.Author.Id == DC.CurrentUser.Id) { return; } if (msg.GetType() == typeof(SocketUserMessage)) { if (msg.Channel.GetType() == typeof(SocketDMChannel)) { Console.WriteLine("Got private message by " + msg.Author.Username); pmHandler.messageRecieved((SocketUserMessage)msg); } else { SocketTextChannel stc = (SocketTextChannel)msg.Channel; var convertedMsg = new ServerMessage(stc.Guild, false, stc, (SocketUserMessage)msg, stc.Guild.GetUser(msg.Author.Id)); servers[stc.Guild.Id].messageRecieved(convertedMsg); } } else { Console.WriteLine("Did not handle non-user msg: " + msg); } }); DC.UserJoined += async(user) => await Task.Run(() => { servers[user.Guild.Id].userJoined(user); }); DC.UserLeft += async(user) => await Task.Run(() => { servers[user.Guild.Id].userLeft(user); }); DC.UserUpdated += async(userOld, userNew) => await Task.Run(() => { if (userNew.GetType() == typeof(SocketGuildUser)) { servers[((SocketGuildUser)userNew).Guild.Id].userUpdated((SocketGuildUser)userOld, (SocketGuildUser)userNew); } else { Console.WriteLine("Unhandled User Update received:\n" + userOld + "\nand\n" + userNew); } }); DC.RoleUpdated += async(oldRole, newRole) => await Task.Run(() => { servers[oldRole.Guild.Id].roleUpdated(oldRole, newRole); }); DC.RoleDeleted += async(role) => await Task.Run(() => { servers[role.Guild.Id].roleDeleted(role); }); bool firstSetup = true; DC.Ready += async() => { Console.WriteLine("there?"); if (firstSetup) { await Task.Run(() => { Console.WriteLine("Battlebot operational"); firstSetup = false; }); } }; DC.GuildAvailable += async(sg) => await Task.Run(() => { Console.WriteLine("here?"); if (!servers.ContainsKey(sg.Id)) { servers.Add(sg.Id, new VirtualServer(DC, sg)); } else { servers[sg.Id].updateServer(sg); } Console.WriteLine(DateTime.Now + " - Connected to: " + sg.Name); }); /* this memleaks everywhere, well really it's more the adding bit but whatever, when dormant it should be harmless * DC.ServerUnavailable += (o, e) => * { * servers.Remove(e.Server); * }; */ DC.Connected += () => { Console.WriteLine("connected for real"); return(Task.FromResult <object>(null)); }; DC.Log += (msg) => { Console.WriteLine("Log Message: " + msg); Console.WriteLine("test: " + msg.Message); if (msg.Message.ToLower() == "failed to resume previous session") { //we just, you know, quit System.Environment.Exit(0); } return(Task.FromResult <object>(null)); }; DC.MessageDeleted += (msg, origin) => { if (msg.Value != null) { Console.WriteLine("Deleted Message was: " + origin + " " + msg.Value.Timestamp + " " + msg.Value.Author + ": " + msg.Value.Content); } else { Console.WriteLine("Deleted unknown message with Id: " + msg.Id); } return(Task.FromResult <object>(null)); }; Console.WriteLine("Execute phase"); var token = File.ReadAllText("token.txt"); Console.WriteLine("token: '" + token + "'"); await DC.LoginAsync(Discord.TokenType.Bot, token); Console.WriteLine("supposedly connected"); await DC.StartAsync(); Console.WriteLine("and start async passed"); //block forever await Task.Delay(-1); }
bool mayNotAccessRoleCommands(ServerMessage e) { return((!lssOn && lg != null && lg.getChannel() != null && lg.getChannel().Id == e.Channel.Id) || TimeoutRole.Members.Any((u) => u.Id == e.Author.Id)); }
void shitlist(ServerMessage e, String m) { }