Exemple #1
0
        /// <summary>
        /// Resolves all strikes a specific user has, with the same reason
        /// </summary>
        /// <param name="e"></param>
        /// <param name="m"></param>
        private void ResolveAllStrikes(ServerMessage e, string message)
        {
            if (!on)
            {
                return;
            }

            string[] split = message.Split(new char[] { ' ' }, 2);

            if (split.Length == 2 && Funcs.GetUserByMentionOrName(server.getServer().Users, split[0]) != null)
            {
                var user     = Funcs.GetUserByMentionOrName(server.getServer().Users, split[0]);
                var userName = user.Nickname ?? user.Username;

                // If the user doesn't have strikes to resolve, print a response
                if (!UserStrikes.ContainsKey(user.Id) || UserStrikes[user.Id].All((s) => s.Resolved))
                {
                    server.safeSendMessage(e.Channel, userName + " does not have any strikes to resolve.");
                }
                else
                {
                    foreach (var strike in UserStrikes[user.Id].Where((s) => !s.Resolved))
                    {
                        strike.Resolved      = true;
                        strike.ResolveReason = split[1];
                    }

                    UserStrikes.persist();

                    server.safeSendMessage(e.Channel, "All of " + userName + "'s unresolved strikes have been resolved.");
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Gives a strike to a mentioned user with a specific reason
        /// </summary>
        /// <param name="e"></param>
        /// <param name="message"></param>
        private void StrikeUser(ServerMessage e, string message)
        {
            if (!on)
            {
                return;
            }

            string[] split = message.Split(new char[] { ' ' }, 2);

            if (split.Length == 2 && Funcs.GetUserByMentionOrName(server.getServer().Users, split[0]) != null)
            {
                var user     = Funcs.GetUserByMentionOrName(server.getServer().Users, split[0]);
                var userName = user.Nickname ?? user.Username;

                var strike = new StrikeDetails()
                {
                    StrikeDate = new DateTimeOffset(DateTime.Now).ToString(),
                    Reason     = split[1]
                };

                // If the user didn't have any previous strikes, create an entry for them
                if (!UserStrikes.ContainsKey(user.Id))
                {
                    var strikes = new List <StrikeDetails>()
                    {
                        strike
                    };

                    UserStrikes.Add(user.Id, strikes);
                    UserStrikes.persist();
                }
                // The user already has an entry, add the strike to the others
                else
                {
                    UserStrikes[user.Id].Add(strike);
                    UserStrikes.persist();

                    // Alert for 3 or more unresolved strikes
                    if (UserStrikes[user.Id].Count((s) => !s.Resolved) >= 4)
                    {
                        server.safeSendMessage(StrikeChannel, server.getServer().EveryoneRole + " " + userName + " has been given their third (or more) strike in " + (e.Channel as SocketTextChannel).Mention + ".\n Reason: " + strike.Reason);
                    }
                }
                if (UserStrikes[user.Id].Count((s) => !s.Resolved) >= 2)
                {
                    server.safeSendMessage(e.Channel, "The user " + userName + " has been given a strike for the following reason: " + split[1]);
                }
                else
                {
                    server.safeSendMessage(e.Channel, "The user " + userName + "has been given a warning for the following reason: " + split[1]);
                }
            }
            else
            {
                server.safeSendMessage(e.Channel, "Invalid format! Please use ``!strike <user mention> <reason>");
            }
        }
Exemple #3
0
        private void userinfo(ServerMessage e, string m)
        {
            var user = Funcs.GetUserByMentionOrName(e.Server.Users, m);

            if (user != null)
            {
                var eb = new Discord.EmbedBuilder().WithAuthor("The Overbork", server.DC.CurrentUser.GetAvatarUrl()).WithCurrentTimestamp();
                eb.WithTitle(user.Nickname + "(" + user.Username + ")").WithDescription(user.Mention);
                eb.AddInlineField("Status", user.Status).AddInlineField("Joined", user.JoinedAt).AddInlineField("Hierarchy Position", user.Hierarchy).AddInlineField("Registered", user.CreatedAt);
                var embed = eb.Build();
                server.safeSendEmbed(e.Channel, embed);
            }
            else
            {
                server.safeSendMessage(e.Channel, "Could not find user: " + m);
            }
        }
Exemple #4
0
        /// <summary>
        /// Resolves a specific strike
        /// </summary>
        /// <param name="e"></param>
        /// <param name="message"></param>
        private void ResolveStrike(ServerMessage e, string message)
        {
            if (!on)
            {
                return;
            }

            string[] split = message.Split(new char[] { ' ' }, 3);

            if (split.Length == 3 && Funcs.GetUserByMentionOrName(server.getServer().Users, split[0]) != null)
            {
                var user     = Funcs.GetUserByMentionOrName(server.getServer().Users, split[0]);
                var userName = user.Nickname ?? user.Username;

                int strikeID;
                // Print an appropriate response to each scenario
                if (!UserStrikes.ContainsKey(user.Id))
                {
                    server.safeSendMessage(e.Channel, userName + " does not have any strikes to resolve.");
                }
                else if (!int.TryParse(split[1], out strikeID))
                {
                    server.safeSendMessage(e.Channel, "Could not parse the strike number to resolve.");
                }
                else if (strikeID < 1 || strikeID > UserStrikes[user.Id].Count)
                {
                    server.safeSendMessage(e.Channel, "There are no strikes that correspond to that number.");
                }
                else if (UserStrikes[user.Id][strikeID - 1].Resolved)
                {
                    server.safeSendMessage(e.Channel, "That specific strike has been resolved already.");
                }
                // Resolve the strike
                else
                {
                    UserStrikes[user.Id][strikeID - 1].Resolved      = true;
                    UserStrikes[user.Id][strikeID - 1].ResolveReason = split[2];
                    UserStrikes.persist();
                    server.safeSendMessage(e.Channel, userName + "'s strike has been resolved.");
                }
            }
        }
Exemple #5
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);
        }