private void OnClientChanged(IClient oldClient, IClient newClient) { // Remove old handlers if (oldClient != null) { oldClient.GameStarted -= OnGameStarted; _controller?.UnsubscribeFromClientEvents(); Bot?.UnsubscribeFromClientEvents(); } // Add new handlers if (newClient != null) { newClient.GameStarted += OnGameStarted; // And create controller + bot _controller = new GameController.GameController(newClient); //Bot = new GenericBot(newClient, new LuckyToiletOnePiece(), null); Bot = new GenericBot(newClient, new AdvancedPierreDellacherieOnePiece(), new SinaCSpecials()); //Bot = new GenericBot(newClient, new ColinFaheyTwoPiece(), new SinaCSpecials()); } else { _controller = null; Bot = null; } }
public List <Command> GetSocialCommands() { List <Command> SocialCommands = new List <Command>(); Command time = new Command("time"); time.Description = "Get the current time with different timezone support"; time.ToExecute += async(client, msg, parameters) => { if (parameters.Empty()) { var currTime = DateTimeOffset.UtcNow.TimeOfDay; bool pm = currTime.Hours >= 12; int hour = currTime.Hours; string minutes = "00" + currTime.Minutes; if (pm) { hour = currTime.Hours - 12; } while (minutes.Length > 2) { minutes = minutes.Substring(1, 3); } string sTime = $"{hour}:{("00" + currTime.Minutes)} "; if (pm) { sTime += "PM"; } else { sTime += "AM"; } await msg.ReplyAsync($"Current GMT time is `{sTime}`"); return; } try { Dictionary <string, string> _timeZones = new Dictionary <string, string>() { { "ACDT", "+10:30" }, { "ACST", "+09:30" }, { "ADT", "-03:00" }, { "AEDT", "+11:00" }, { "AEST", "+10:00" }, { "AHDT", "-09:00" }, { "AHST", "-10:00" }, { "AST", "-04:00" }, { "AT", "-02:00" }, { "AWDT", "+09:00" }, { "AWST", "+08:00" }, { "BAT", "+03:00" }, { "BDST", "+02:00" }, { "BET", "-11:00" }, { "BST", "01:00" }, { "BT", "+03:00" }, { "BZT2", "-03:00" }, { "CADT", "+10:30" }, { "CAST", "+09:30" }, { "CAT", "-10:00" }, { "CCT", "+08:00" }, { "CDT", "-05:00" }, { "CED", "+02:00" }, { "CET", "+01:00" }, { "CEST", "+02:00" }, { "CST", "-06:00" }, { "EAST", "+10:00" }, { "EDT", "-04:00" }, { "EED", "+03:00" }, { "EET", "+02:00" }, { "EEST", "+03:00" }, { "EST", "-05:00" }, { "FST", "+02:00" }, { "FWT", "+01:00" }, { "GMT", "+00:00" }, { "GST", "+10:00" }, { "HDT", "-09:00" }, { "HST", "-10:00" }, { "IDLE", "+12:00" }, { "IDLW", "-12:00" }, { "IST", "+05:30" }, { "IT", "+03:30" }, { "JST", "+09:00" }, { "JT", "+07:00" }, { "MDT", "-06:00" }, { "MED", "+02:00" }, { "MET", "+01:00" }, { "MEST", "+02:00" }, { "MEWT", "+01:00" }, { "MST", "-07:00" }, { "MT", "+08:00" }, { "NDT", "-02:30" }, { "NFT", "-03:30" }, { "NT", "-11:00" }, { "NST", "+06:30" }, { "NZ", "+11:00" }, { "NZST", "+12:00" }, { "NZDT", "+13:00" }, { "NZT", "+12:00" }, { "PDT", "-07:00" }, { "PST", "-08:00" }, { "ROK", "+09:00" }, { "SAD", "+10:00" }, { "SAST", "+09:00" }, { "SAT", "+09:00" }, { "SDT", "+10:00" }, { "SST", "+02:00" }, { "SWT", "+01:00" }, { "USZ3", "+04:00" }, { "USZ4", "+05:00" }, { "USZ5", "+06:00" }, { "USZ6", "+07:00" }, { "UT", "-00:00" }, { "UTC", "-00:00" }, { "UZ10", "+11:00" }, { "WAT", "-01:00" }, { "WET", "-00:00" }, { "WST", "+08:00" }, { "YDT", "-08:00" }, { "YST", "-09:00" }, { "ZP4", "+04:00" }, { "ZP5", "+05:00" }, { "ZP6", "+06:00" } }; var currTime = DateTimeOffset.UtcNow.TimeOfDay + TimeSpan.Parse(_timeZones[parameters[0].ToUpper()]); bool pm = currTime.Hours >= 12; int hour = currTime.Hours; if (pm) { hour = currTime.Hours - 12; } string sTime = $"{hour}:{currTime.Minutes} "; if (pm) { sTime += "PM"; } else { sTime += "AM"; } await msg.ReplyAsync($"Current {parameters[0].ToUpper()} time is `{sTime}`"); } catch (Exception ex) { await msg.ReplyAsync($"An error occured: `{ex.Message}`"); if (msg.Author.Id == 169918990313848832) { await msg.ReplyAsync($"```\n{ex.StackTrace}\n```"); } } }; SocialCommands.Add(time); Command jeff = new Command("jeff"); jeff.ToExecute += async(client, msg, parameters) => { string filename = ""; if (parameters.Empty()) { var user = msg.Author; using (WebClient webClient = new WebClient()) { await webClient.DownloadFileTaskAsync(new Uri(user.GetAvatarUrl().Replace("size=128", "size=512")), $"files/img/{user.AvatarId}.png"); } filename = $"files/img/{user.AvatarId}.png"; } else if (Uri.IsWellFormedUriString(parameters[0], UriKind.RelativeOrAbsolute) && (parameters[0].EndsWith(".png") || parameters[0].EndsWith(".jpg") || parameters[0].EndsWith("jpeg") || parameters[0].EndsWith(".gif"))) { filename = $"files/img/{msg.Id}.{parameters.reJoin().Split('.').Last()}"; using (WebClient webclient = new WebClient()) { await webclient.DownloadFileTaskAsync(new Uri(parameters.reJoin()), filename); } } else if (msg.GetMentionedUsers().Any()) { var user = msg.GetMentionedUsers().First(); using (WebClient webClient = new WebClient()) { await webClient.DownloadFileTaskAsync(new Uri(user.GetAvatarUrl().Replace("size=128", "size=512")), $"files/img/{user.AvatarId}.png"); } filename = $"files/img/{user.AvatarId}.png"; } { int targetWidth = 1278; int targetHeight = 717; //height and width of the finished image Image baseImage = Image.FromFile("files/img/jeff.png"); Image avatar = Image.FromFile(filename); //be sure to use a pixelformat that supports transparency using (var bitmap = new Bitmap(targetWidth, targetHeight, PixelFormat.Format32bppArgb)) { using (var canvas = Graphics.FromImage(bitmap)) { //this ensures that the backgroundcolor is transparent canvas.Clear(Color.White); //this paints the frontimage with a offset at the given coordinates canvas.DrawImage(avatar, 523, 92, 269, 269); //this selects the entire backimage and and paints //it on the new image in the same size, so its not distorted. canvas.DrawImage(baseImage, 0, 0, targetWidth, targetHeight); canvas.Save(); } bitmap.Save($"files/img/jeff_{msg.Id}.png", System.Drawing.Imaging.ImageFormat.Png); } await Task.Delay(100); await msg.Channel.SendFileAsync($"files/img/jeff_{msg.Id}.png"); baseImage.Dispose(); avatar.Dispose(); File.Delete(filename); File.Delete($"files/img/jeff_{msg.Id}.png"); } }; SocialCommands.Add(jeff); Command giveaway = new Command("giveaway"); giveaway.Usage = "giveaway <start|close|roll>"; giveaway.Description = "Start or end a giveaway"; giveaway.RequiredPermission = Command.PermissionLevels.Moderator; giveaway.ToExecute += async(client, msg, parameters) => { if (parameters.Empty()) { await msg.ReplyAsync( $"You have to tell me to do something. _\\*(Try `{GenericBot.GuildConfigs[msg.GetGuild().Id].Prefix}help giveaway)*_ for some options"); return; } string op = parameters[0].ToLower(); var guildConfig = GenericBot.GuildConfigs[msg.GetGuild().Id]; if (op.Equals("start")) { if (guildConfig.Giveaway == null || !guildConfig.Giveaway.Open) { guildConfig.Giveaway = new Giveaway(); await msg.ReplyAsync($"A new giveaway has been created!"); } else { await msg.ReplyAsync( $"There is already an open giveaway! You have to close it before you can open a new one."); } } else if (op.Equals("close")) { if (guildConfig.Giveaway == null || !guildConfig.Giveaway.Open) { await msg.ReplyAsync($"There's no open giveaway."); } else { guildConfig.Giveaway.Open = false; await msg.ReplyAsync($"Giveaway closed! {guildConfig.Giveaway.Hopefuls.Count} people entered."); } } else if (op.Equals("roll")) { if (guildConfig.Giveaway == null) { await msg.ReplyAsync($"There's no existing giveaway."); } else if (guildConfig.Giveaway.Open) { await msg.ReplyAsync("You have to close the giveaway first!"); } else { await msg.ReplyAsync( $"<@{guildConfig.Giveaway.Hopefuls.GetRandomItem()}> has won... something!"); } } else { await msg.ReplyAsync($"That's not a valid option"); } guildConfig.Save(); }; SocialCommands.Add(giveaway); Command g = new Command("g"); g.Description = "Enter into the active giveaway"; g.ToExecute += async(client, msg, parameters) => { var guildConfig = GenericBot.GuildConfigs[msg.GetGuild().Id]; { RestUserMessage resMessge; if (guildConfig.Giveaway == null || !guildConfig.Giveaway.Open) { resMessge = msg.ReplyAsync($"There's no open giveaway.").Result; } else { var guildConfigGiveaway = guildConfig.Giveaway; if (guildConfigGiveaway.Hopefuls.Contains(msg.Author.Id)) { resMessge = msg.ReplyAsync($"You're already in this giveaway.").Result; } else { guildConfigGiveaway.Hopefuls.Add(msg.Author.Id); resMessge = msg.ReplyAsync($"You're in, {msg.Author.Mention}. Good luck!").Result; } } GenericBot.QueueMessagesForDelete(new List <IMessage> { msg, resMessge }); } guildConfig.Save(); }; SocialCommands.Add(g); Command checkinvite = new Command("checkinvite"); checkinvite.Description = "Check the information of a discord invite"; checkinvite.Usage = "checkinvite <code>"; checkinvite.ToExecute += async(client, msg, parameters) => { if (parameters.Empty()) { await msg.ReplyAsync($"You need to give me a code to look at!"); return; } var inviteCode = parameters.Last().Split("/").Last(); try { var invite = client.GetInviteAsync(inviteCode).Result; if (invite.Equals(null)) { await msg.Channel.SendMessageAsync("", embed : new EmbedBuilder() .WithColor(255, 0, 0) .WithDescription("Invalid invite").Build()); } var embedBuilder = new EmbedBuilder() .WithColor(0, 255, 0) .WithTitle("Valid Invite") .WithUrl($"https://discord.gg/{invite.Code}") .AddField(new EmbedFieldBuilder().WithName("Guild Name").WithValue(invite.GuildName) .WithIsInline(true)) .AddField(new EmbedFieldBuilder().WithName("_ _").WithValue("_ _").WithIsInline(true)) .AddField(new EmbedFieldBuilder().WithName("Channel Name").WithValue(invite.ChannelName) .WithIsInline(true)) .AddField(new EmbedFieldBuilder().WithName("Guild Id").WithValue(invite.GuildId) .WithIsInline(true)) .AddField(new EmbedFieldBuilder().WithName("_ _").WithValue("_ _").WithIsInline(true)) .AddField(new EmbedFieldBuilder().WithName("Channel Id").WithValue(invite.ChannelId) .WithIsInline(true)) .WithCurrentTimestamp(); await msg.Channel.SendMessageAsync("", embed : embedBuilder.Build()); } catch (Exception e) { await msg.Channel.SendMessageAsync("", embed : new EmbedBuilder() .WithColor(255, 0, 0) .WithDescription("Invalid invite").Build()); } }; SocialCommands.Add(checkinvite); Command hug = new Command("hug"); hug.Delete = true; hug.Usage = "hug <?user>"; hug.ToExecute += async(client, msg, parameters) => { if (msg.MentionedUsers.Any()) { await msg.ReplyAsync($"_\\*{msg.Author.Mention} hugs {msg.MentionedUsers.Select(u => u.Mention).ToList().SumAnd()}*_"); } else { await msg.ReplyAsync($"_\\*hugs {msg.Author.Mention}*_"); } }; SocialCommands.Add(hug); return(SocialCommands); }
public List <Command> GetRoleCommands() { List <Command> RoleCommands = new List <Command>(); Command mentionRole = new Command(nameof(mentionRole)); mentionRole.RequiredPermission = Command.PermissionLevels.Moderator; mentionRole.Description = "Mention a role that's not normally mentionable"; mentionRole.ToExecute += async(client, msg, parameters) => { if (msg.GetGuild().Roles.HasElement(r => r.Name.ToLower().Contains(parameters[0].ToLower()), out SocketRole role)) { var state = role.IsMentionable; if (!state) { await role.ModifyAsync(r => r.Mentionable = true); } parameters.RemoveAt(0); await msg.ReplyAsync(role.Mention + " " + parameters.reJoin()); await msg.DeleteAsync(); if (!state) { await role.ModifyAsync(r => r.Mentionable = state); } } else { await msg.ReplyAsync("Couldn't find that role!"); } }; RoleCommands.Add(mentionRole); Command UserRoles = new Command("userroles"); UserRoles.Description = $"Show all user roles on this server"; UserRoles.Usage = "userroles"; UserRoles.ToExecute += async(client, msg, paramList) => { string prefix = (!String.IsNullOrEmpty(GenericBot.GuildConfigs[(msg.Channel as SocketGuildChannel).Guild.Id].Prefix)) ? GenericBot.GuildConfigs[(msg.Channel as SocketGuildChannel).Guild.Id].Prefix : GenericBot.GlobalConfiguration.DefaultPrefix; string message = $"You can use `{prefix}iam` and `{prefix}iamnot` with any of these roles:\n"; foreach (var role in msg.GetGuild().Roles .Where(r => GenericBot.GuildConfigs[msg.GetGuild().Id].UserRoleIds.Contains(r.Id)) .OrderBy(r => r.Name)) { if ((msg.Author as SocketGuildUser).Roles.Contains(role)) { message += "\\✔ "; } else { message += "✘"; } message += $"`{role.Name}`, "; } message = message.Trim(' ', ','); foreach (var str in message.SplitSafe()) { await msg.ReplyAsync(str); } }; RoleCommands.Add(UserRoles); Command iam = new Command("iam"); iam.Description = "Join a User Role"; iam.Usage = "iam <role name>"; iam.Aliases = new List <string> { "join" }; iam.ToExecute += async(client, msg, paramList) => { IMessage rep; if (paramList.Empty()) { rep = msg.ReplyAsync($"Please select a role to join").Result; GenericBot.QueueMessagesForDelete(new List <IMessage> { msg, rep }); } string input = paramList.Aggregate((i, j) => i + " " + j); var roles = msg.GetGuild().Roles.Where(r => r.Name.ToLower().Contains(input.ToLower())) .Where(r => GenericBot.GuildConfigs[msg.GetGuild().Id].UserRoleIds.Contains(r.Id)); if (!roles.Any()) { rep = msg.ReplyAsync($"Could not find any user roles matching `{input}`").Result; GenericBot.QueueMessagesForDelete(new List <IMessage> { msg, rep }); } else if (roles.Count() == 1) { try { RestUserMessage message; if (msg.GetGuild().GetUser(msg.Author.Id).Roles.Any(r => r.Id == roles.First().Id)) { message = await msg.ReplyAsync("You already have that role!"); } else { await msg.GetGuild().GetUser(msg.Author.Id).AddRoleAsync(roles.First()); message = await msg.ReplyAsync("Done!"); } await Task.Delay(5000); await msg.DeleteAsync(); await message.DeleteAsync(); } catch (Exception e) { await GenericBot.Logger.LogErrorMessage(e.Message); await msg.ReplyAsync($"I may not have permissions to do that!"); } } else if (roles.Count() > 1) { try { var role = roles.Any(r => r.Name.ToLower() == input.ToLower()) ? roles.First(r => r.Name.ToLower() == input.ToLower()) : roles.First(); RestUserMessage message; if (msg.GetGuild().GetUser(msg.Author.Id).Roles.Any(r => r.Id == roles.First().Id)) { message = await msg.ReplyAsync("You already have that role!"); } else { await msg.GetGuild().GetUser(msg.Author.Id).AddRoleAsync(role); message = await msg.ReplyAsync($"I've assigned you `{role.Name}`"); } await Task.Delay(5000); await msg.DeleteAsync(); await message.DeleteAsync(); } catch (Exception e) { await GenericBot.Logger.LogErrorMessage(e.Message); await msg.ReplyAsync($"I may not have permissions to do that!"); } } }; RoleCommands.Add(iam); Command iamnot = new Command("iamnot"); iamnot.Description = "Leave a User Role"; iamnot.Usage = "iamnot <role name>"; iamnot.Aliases = new List <string> { "leave" }; iamnot.ToExecute += async(client, msg, paramList) => { IMessage rep; if (paramList.Empty()) { rep = msg.ReplyAsync($"Please select a role to leave").Result; GenericBot.QueueMessagesForDelete(new List <IMessage> { msg, rep }); } string input = paramList.Aggregate((i, j) => i + " " + j); var roles = msg.GetGuild().Roles.Where(r => r.Name.ToLower().Contains(input.ToLower())) .Where(r => GenericBot.GuildConfigs[msg.GetGuild().Id].UserRoleIds.Contains(r.Id)); if (!roles.Any()) { rep = msg.ReplyAsync($"Could not find any user roles matching `{input}`").Result; GenericBot.QueueMessagesForDelete(new List <IMessage> { msg, rep }); } else if (roles.Count() == 1) { try { RestUserMessage message; if (!msg.GetGuild().GetUser(msg.Author.Id).Roles.Any(r => r.Id == roles.First().Id)) { message = await msg.ReplyAsync("You don't have that role!"); } else { await msg.GetGuild().GetUser(msg.Author.Id).RemoveRoleAsync(roles.First()); message = await msg.ReplyAsync("Done!"); } await Task.Delay(5000); await msg.DeleteAsync(); await message.DeleteAsync(); } catch (Exception e) { await GenericBot.Logger.LogErrorMessage(e.Message); await msg.ReplyAsync($"I may not have permissions to do that!"); } } else if (roles.Count() > 1) { try { RestUserMessage message; if (!msg.GetGuild().GetUser(msg.Author.Id).Roles.Any(r => r.Id == roles.First().Id)) { message = await msg.ReplyAsync("You don't have that role!"); } else { await msg.GetGuild().GetUser(msg.Author.Id).RemoveRoleAsync(roles.First()); message = await msg.ReplyAsync($"Removed `{roles.First()}`"); } await Task.Delay(5000); await msg.DeleteAsync(); await message.DeleteAsync(); } catch (Exception e) { await GenericBot.Logger.LogErrorMessage(e.Message); await msg.ReplyAsync($"I may not have permissions to do that!"); } } }; RoleCommands.Add(iamnot); Command getrole = new Command("getrole"); getrole.Description = "Get the ID of a role"; getrole.Usage = "getrole <role name>"; getrole.RequiredPermission = Command.PermissionLevels.Moderator; getrole.ToExecute += async(client, msg, paramList) => { string message = $"Roles matching `{paramList.reJoin()}`:\n"; foreach (var role in msg.GetGuild().Roles.Where(r => r.Name.ToLower().Contains(paramList.reJoin()))) { message += $"{role.Name} (`{role.Id}`)\n"; } foreach (var str in message.SplitSafe()) { msg.ReplyAsync(str); } }; RoleCommands.Add(getrole); Command membersOf = new Command("membersof"); membersOf.Description = "List all members of a role"; membersOf.Usage = "membersof <rolename>"; membersOf.RequiredPermission = Command.PermissionLevels.Moderator; membersOf.ToExecute += async(client, msg, parameters) => { if (parameters.Empty()) { await msg.ReplyAsync($"You need to specify a role"); return; } string result = ""; foreach (var role in msg.GetGuild().Roles.OrderByDescending(r => r.Position).Where(r => new Regex(parameters.reJoin(), RegexOptions.IgnoreCase).IsMatch(r.Name) && r.Name != "@everyone")) { result += $"\n**`{role.Name}` ({role.Members.Count()} Members)**\n"; foreach (var user in role.Members.OrderBy(u => u.Username)) { if (!string.IsNullOrEmpty(user.Nickname)) { result += $"{user.Nickname.Replace('`', '\'').Replace("_", "\\_")} "; } else { result += $"{user.Username.Replace('`', '\'').Replace("_", "\\_")} "; } result += $"(`{user.ToString().Replace('`', '\'')}`)\n"; } } foreach (var str in result.SplitSafe('\n')) { await msg.ReplyAsync(str); } }; RoleCommands.Add(membersOf); Command createRole = new Command("createRole"); createRole.Description = "Create a new role with default permissions"; createRole.Usage = "createRole <name>"; createRole.RequiredPermission = Command.PermissionLevels.Admin; createRole.ToExecute += async(client, msg, parameters) => { RestRole role; bool makeMentionable = false; if (parameters[0].ToLower().Equals("+m")) { parameters.RemoveAt(0); makeMentionable = true; } role = msg.GetGuild().CreateRoleAsync(parameters.reJoin(), GuildPermissions.None).Result; if (makeMentionable) { await role.ModifyAsync(r => r.Mentionable = true); } await msg.ReplyAsync($"Created new role `{role.Name}` with ID `{role.Id}`"); }; RoleCommands.Add(createRole); Command createUserRole = new Command("createUserRole"); createUserRole.Description = "Create a new role with default permissions and add it to the public role list"; createUserRole.Usage = "createUserRole <name>"; createUserRole.RequiredPermission = Command.PermissionLevels.Admin; createUserRole.ToExecute += async(client, msg, parameters) => { RestRole role; bool makeMentionable = false; if (parameters[0].ToLower().Equals("+m")) { parameters.RemoveAt(0); makeMentionable = true; } role = msg.GetGuild().CreateRoleAsync(parameters.reJoin(), GuildPermissions.None).Result; var gc = GenericBot.GuildConfigs[msg.GetGuild().Id]; gc.UserRoleIds.Add(role.Id); gc.Save(); if (makeMentionable) { await role.ModifyAsync(r => r.Mentionable = true); } await msg.ReplyAsync($"Created new role `{role.Name}` with ID `{role.Id}` and added it to the user roles"); }; RoleCommands.Add(createUserRole); Command roleeveryone = new Command("roleeveryone"); roleeveryone.Aliases = new List <string> { "roleveryone" }; roleeveryone.Description = "Give or remove a role from everyone"; roleeveryone.Usage = "roleveryone [+-] <roleID>"; roleeveryone.RequiredPermission = Command.PermissionLevels.Admin; roleeveryone.ToExecute += async(client, msg, parameters) => { if (!(parameters[0].Contains("+") || parameters[0].Contains("-"))) { await msg.ReplyAsync($"Invalid option `{parameters[0]}`"); } ulong id; if (ulong.TryParse(parameters[1], out id) && msg.GetGuild().Roles.Any(r => r.Id == id)) { int i = 0; await msg.GetGuild().DownloadUsersAsync(); var role = msg.GetGuild().GetRole(id); foreach (var u in msg.GetGuild().Users) { if (parameters[0].Contains("-") && u.Roles.Any(r => r.Id == id)) { await u.RemoveRoleAsync(role); i++; } if (parameters[0].Contains("+") && !u.Roles.Any(r => r.Id == id)) { await u.AddRoleAsync(role); i++; } } string addrem = parameters[0].Contains("+") ? "Added" : "Removed"; string tofrom = parameters[0].Contains("+") ? "to" : "from"; await msg.ReplyAsync($"{addrem} `{role.Name}` {tofrom} `{i}` users."); } else { await msg.ReplyAsync("Invalid Role Id"); } }; RoleCommands.Add(roleeveryone); Command roleStore = new Command("roleStore"); roleStore.Description = "Store your roles so you can restore them later"; roleStore.Usage = "rolestore [save|restore]"; roleStore.ToExecute += async(client, msg, parameters) => { if (parameters[0].ToLower().Equals("save")) { var guildDb = new DBGuild(msg.GetGuild().Id); var dbUser = guildDb.Users.First(u => u.ID.Equals(msg.Author.Id)); List <ulong> roles = new List <ulong>(); foreach (var role in (msg.Author as SocketGuildUser).Roles) { roles.Add(role.Id); } dbUser.SavedRoles = roles; await msg.ReplyAsync($"I've saved `{dbUser.SavedRoles.Count}` roles for you!"); guildDb.Save(); } else if (parameters[0].ToLower().Equals("restore")) { var guildDb = new DBGuild(msg.GetGuild().Id); if (guildDb.Users.Any(u => u.ID.Equals(msg.Author.Id))) // if already exists { var dbUser = guildDb.Users.First(u => u.ID.Equals(msg.Author.Id)); if (dbUser.SavedRoles == null || !dbUser.SavedRoles.Any()) { await msg.ReplyAsync("No roles saved. Try using `rolestore save` first!"); return; } int success = 0; int fails = 0; foreach (var id in dbUser.SavedRoles.Where(id => !(msg.Author as IGuildUser).RoleIds.Contains(id))) { try { await(msg.Author as SocketGuildUser).AddRoleAsync( msg.GetGuild().Roles.First(r => r.Id.Equals(id))); success++; } catch (Exception e) { fails++; } } await msg.ReplyAsync($"`{success}` roles restored, `{fails}` failed"); } else { await msg.ReplyAsync("I don't have any saved roles for you"); return; } } else { await msg.ReplyAsync("Invalid option"); } }; RoleCommands.Add(roleStore); return(RoleCommands); }