/// <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."); } } }
/// <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>"); } }
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); } }
/// <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."); } } }
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); }