Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        private string proposalList(ServerMessage arg1, string name, string args)
        {
//            string msg;
            return("Sorry, not yet");
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 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));
 }
Ejemplo n.º 6
0
 void shitlist(ServerMessage e, String m)
 {
 }