async static void Deny(SocketMessage message, ulong id) { var requests = PingRequests.PullData(); if (requests.Count(x => x.ID == id) == 0) { await message.Channel.SendMessageAsync("❌ Unkown ID!"); return; } var request = requests.Find(x => x.ID == id); var deniedEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Ping Request") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782619217055842334/noun_Close_1984788.png"); // Close by Bismillah from the Noun Project }) .WithDescription(request.Description.Replace("Waiting...", "Denied")) .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0xDD0000)).Build(); var oldMsg = await((IMessageChannel)Program._client.GetChannel(BaseConfig.GetConfig().Channels.PingRequests)).GetMessageAsync(request.ID); await((IUserMessage)oldMsg).ModifyAsync(m => m.Embed = deniedEmbed); requests.Remove(request); PingRequests.PushData(requests); await message.Channel.SendMessageAsync("Request denied"); }
async static void Approve(SocketMessage message, ulong id) { var requests = PingRequests.PullData(); if (requests.Count(x => x.ID == id) == 0) { await message.Channel.SendMessageAsync("❌ Unkown ID!"); return; } var request = requests.Find(x => x.ID == id); var role = ((SocketGuildChannel)message.Channel).Guild.GetRole(request.RoleID); await((IMessageChannel)Program._client.GetChannel(request.ChannelID)).SendMessageAsync(role.Mention); var approvedEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Ping Request") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782586791831666688/noun_checkmark_737739.png"); // checkmark by Vladimir from the Noun Project }) .WithDescription(request.Description.Replace("Waiting...", "Approved")) .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x00DD00)).Build(); var oldMsg = await((IMessageChannel)Program._client.GetChannel(BaseConfig.GetConfig().Channels.PingRequests)).GetMessageAsync(request.ID); await((IUserMessage)oldMsg).ModifyAsync(m => m.Embed = approvedEmbed); requests.Remove(request); PingRequests.PushData(requests); await message.Channel.SendMessageAsync("Request approved"); }
/// <summary> /// Meghatározható típusú logolás a terminálba és a BaseConfigban beállított szobákba. /// </summary> /// <param name="mode">command, rankup</param> /// <returns></returns> public async static Task Log(string mode) { var message = Recieved.Message; Console.Write(DateTime.Now.ToString("yyyy.MM.dd. HH:mm:ss") + " "); string output = ""; switch (mode) { case "command": output = $"Command run - {message.Author.Username}#{message.Author.Discriminator} in #{message.Channel}: {message.Content}"; break; case "rankup": var members = Members.PullData(); output = $"Event - {message.Author.Username}#{message.Author.Discriminator} ranked up: {members[members.IndexOf(members.Find(x => x.ID == message.Author.Id))].Rank + 1}"; break; default: return; } foreach (var id in BaseConfig.GetConfig().Channels.BotTerminal) { try { await((IMessageChannel)_client.GetChannel(id)).SendMessageAsync(output); } catch (Exception) { } } Console.WriteLine(output); }
/// <summary> /// Ellenőrzi, hogy az üzenet bot szobába volt-e küldve. /// </summary> /// <returns></returns> public static bool BotChannel() { if (BaseConfig.GetConfig().Channels.BotChannel.Contains(Recieved.Message.Channel.Id)) { return(true); } return(false); }
/// <summary> /// Ellenőrzi, hogy az üzenetküldőnek van-e megfelelő rangja /// </summary> /// <param name="allowedRoles"></param> /// <returns></returns> public static bool HasPerm(List <ulong> allowedRoles) { foreach (var role in (Recieved.Message.Author as SocketGuildUser).Roles) { if (allowedRoles.Contains(role.Id) || BaseConfig.GetConfig().Roles.Admin.Contains(role.Id)) { return(true); } } return(false); }
public async Task MainAsync() { _client = new DiscordSocketClient(); _client.MessageReceived += MessageHandler; _client.Log += Log; var token = BaseConfig.GetConfig().Token; await _client.LoginAsync(TokenType.Bot, token); await _client.StartAsync(); await Task.Delay(-1); }
/// <summary> /// Ellenőrzi, hogy az üzenetküldő Admin-e. /// </summary> /// <param name="isOwner">Admin helyett tulajdonost ellenőriz.</param> /// <returns></returns> public static bool IsAdmin(bool isOwner) { foreach (var role in (Recieved.Message.Author as SocketGuildUser).Roles) { if ((role.Permissions.Administrator && !isOwner) || BaseConfig.GetConfig().OwnerID == Recieved.Message.Author.Id) { return(true); } } return(false); }
public async static Task DoEvent(SocketGuildUser user) { try { if (user.Guild.Id == BaseConfig.GetConfig().ServerID) { var members = Members.PullData(); members.RemoveAt(members.IndexOf(members.Find(x => x.ID == user.Id))); Members.PushData(members); await Program.Log($"{user.Username}#{user.Discriminator} ({user.Id}) removed from the database"); } } catch (Exception) { } }
/// <summary> /// Parancs futtatásának logolása /// </summary> /// <returns></returns> public async static Task LogCommandRun() { var message = Recieved.Message; Console.Write(DateTime.Now.ToString("yyyy.MM.dd. HH:mm:ss") + " "); string output = $"Command run - {message.Author.Username}#{message.Author.Discriminator} in #{message.Channel}: {message.Content}"; foreach (var id in BaseConfig.GetConfig().Terminals) { try { await((IMessageChannel)_client.GetChannel(id)).SendMessageAsync(output, allowedMentions: AllowedMentions.None); } catch (Exception) { } } Console.WriteLine(output); }
/// <summary> /// Error logolás a terminálba és a BaseConfigban beállított szobákba. /// </summary> /// <param name="e"></param> /// <returns></returns> public async static Task Log(Exception e) { var message = Recieved.Message; Console.Write(DateTime.Now.ToString("yyyy.MM.dd. HH:mm:ss") + " "); string output = $"Error ```\n{e.Message}\n```"; foreach (var id in BaseConfig.GetConfig().Channels.BotTerminal) { try { await((IMessageChannel)_client.GetChannel(id)).SendMessageAsync(output, allowedMentions: AllowedMentions.None); } catch (Exception) { } } Console.WriteLine(output); }
public async static Task DoEvent() { foreach (var id in BaseConfig.GetConfig().Channels.Backups) { try { if (id != 0) { await((IMessageChannel)Program._client.GetChannel(id)).SendFileAsync(@"Members.json"); await Program.Log($"Made a backup in <#{id}>"); } } catch (Exception) { } } }
public async static Task DoCommand() { await Program.Log(); var message = Recieved.Message; string[] input = message.Content.Split(); if (!Program.HasPerm(RequiredRoles) && input.Length < 2) { await message.Channel.SendMessageAsync("❌ Only members with Ptan+ Budget and above can evaluate math expressions!"); return; } try { Expression expr = new Expression(message.ToString().Replace(input[0], "")); var embed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Math evaluation") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/831126332481470484/noun_Math_3492780.png"); // Math by Clea Doltz from the Noun Project }) .WithDescription($"Here is your result: **{expr.Evaluate()}**") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x65794F)).Build(); await message.Channel.SendMessageAsync( null, embed : embed) .ConfigureAwait(false); } catch (Exception e) { await message.Channel.SendMessageAsync("❌ | Sorry, I didn't understand that!"); foreach (var i in BaseConfig.GetConfig().Channels.BotTerminal) { await((IMessageChannel)Program._client.GetChannel(i)).SendMessageAsync($"```{e}```"); } } }
private Task MessageHandler(SocketMessage message) { string firstWord = message.Content.Split()[0]; bool pong = message.Author.Id == BaseConfig.GetConfig().BotID&& firstWord == "Pinging..."; if (pong || !message.Author.IsBot) { Recieved.Message = message; } else { return(Task.CompletedTask); } if (pong) { Ping.DoCommand(true); } if (!message.Content.StartsWith(BaseConfig.GetConfig().Prefix) || message.Author.IsBot) { return(Task.CompletedTask); } string command = firstWord.Substring(1, firstWord.Length - 1).ToLower(); // Commands if (Commands.Commands.Aliases.Contains(command) && BotChannel()) { Commands.Commands.DoCommand(); } if (Ping.Aliases.Contains(command) && BotChannel()) { Ping.DoCommand(false); } if (Restart.Aliases.Contains(command) && BotChannel() && IsAdmin(true)) { Restart.DoCommand(); } if (Test.Aliases.Contains(command) && BotChannel() && IsAdmin(true)) { Test.DoCommand(); } return(Task.CompletedTask); }
private Task CommandHandler(SocketMessage message) { if (!message.Content.StartsWith(BaseConfig.GetConfig().Prefix) || message.Author.IsBot) { return(Task.CompletedTask); } string firstWord = message.Content.Split()[0]; string command = firstWord.Substring(1, firstWord.Length - 1).ToLower(); if (BotChannel()) { // Dev if (Evaluate.Aliases.Contains(command) && HasPerm(Evaluate.AllowedRoles)) { Evaluate.DoCommand(); } if (Restart.Aliases.Contains(command) && HasPerm(Restart.AllowedRoles)) { Restart.DoCommand(); } if (Test.Aliases.Contains(command) && HasPerm(Test.AllowedRoles)) { Test.DoCommand(); } // Fun if (Minesweeper.Aliases.Contains(command)) { Minesweeper.DoCommand(); } // Main if (Leaderboard.Aliases.Contains(command)) { Leaderboard.DoCommand(); } if (Rank.Aliases.Contains(command)) { Rank.DoCommand(); } } return(Task.CompletedTask); }
public async static void Approve(SocketMessage message, ulong id, byte score) { var requests = AnswerRequests.PullData(); if (requests.Count(x => x.ID == id) == 0) { await message.Channel.SendMessageAsync("❌ Unkown ID!"); return; } var request = requests.Find(x => x.ID == id); var approvedEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Answer Request") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782586791831666688/noun_checkmark_737739.png"); // checkmark by Vladimir from the Noun Project }) .WithDescription(request.Description.Replace("Waiting...", $"Approved ({score})")) .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x00DD00)).Build(); var oldMsg = await((IMessageChannel)Program._client.GetChannel(BaseConfig.GetConfig().Channels.AnswerRequests)).GetMessageAsync(request.ID); await((IUserMessage)oldMsg).ModifyAsync(m => m.Embed = approvedEmbed); requests.Remove(request); AnswerRequests.PushData(requests); var userId = request.UserID; var members = Members.PullData(); if (members.Count(x => x.ID == userId) == 0) { members.Add(new Members(userId)); } members[members.IndexOf(members.Find(x => x.ID == userId))].Help += score; Members.PushData(members); await message.Channel.SendMessageAsync("Request approved"); }
public async static void Request(SocketMessage message) { var requests = AnswerRequests.PullData(); var answerRequestsChannel = (IMessageChannel)Program._client.GetChannel(BaseConfig.GetConfig().Channels.AnswerRequests); var responseEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Answer Request Sent") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782963424191447061/noun_comment_3266585.png"); // comment by Larea from the Noun Project }) .WithDescription($"{message.Author.Mention}\nYour request will be reviewed soon") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x7289DA)).Build(); var response = await message.Channel.SendMessageAsync(null, embed : responseEmbed); var embedMessage = await answerRequestsChannel.SendMessageAsync(null, embed : new EmbedBuilder().WithDescription("Embed").Build()); var requestEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Answer Request") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782886030638055464/noun_Plus_1809808.png"); // Plus by sumhi_icon from the Noun Project }) .WithDescription($"{message.Author.Mention} requested to review their answer in <#{message.Channel.Id}>.\nStatus: **Waiting...**\n\n Request's link:\n https://discord.com/channels/{((SocketGuildChannel)message.Channel).Guild.Id}/{message.Channel.Id}/{response.Id} \n\nID: `{embedMessage.Id}`") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name).Build(); await embedMessage.ModifyAsync(m => m.Embed = requestEmbed); var mention = await answerRequestsChannel.SendMessageAsync(((SocketGuildChannel)message.Channel).Guild.GetRole(782965011047514162).Mention); // AnswerRequest role pingelése a moderátorok értesítéséért. await message.Channel.DeleteMessageAsync(message); await answerRequestsChannel.DeleteMessageAsync(mention); requests.Add(new AnswerRequests(embedMessage.Id, message.Author.Id, requestEmbed.Description)); AnswerRequests.PushData(requests); }
public async static Task DoEvent() { var members = Members.PullData(); for (int i = 0; i < members.Count; i++) { DateTime date = DateTime.Now; try { date = DateTime.ParseExact(members[i].PPlusDate, "dd/MM/yyyy", CultureInfo.InvariantCulture); } catch (Exception) { } if (date < DateTime.Now && members[i].PPlusDate != "") { members[i].PPlusDate = ""; var user = Program._client.GetGuild(830806387956514826).GetUser(members[i].ID); foreach (var role in user.Roles) { if (!BaseConfig.GetConfig().Roles.Mod.Contains(role.Id)) { if (BaseConfig.GetConfig().Roles.PtanB.Contains(role.Id)) { await user.RemoveRoleAsync(role); } if (BaseConfig.GetConfig().Roles.PtanS.Contains(role.Id)) { await user.RemoveRoleAsync(role); } if (BaseConfig.GetConfig().Roles.PtanP.Contains(role.Id)) { await user.RemoveRoleAsync(role); } } } await Program.Log($"{user.Username}#{user.Discriminator}'s Ptan+ subscription has expired"); Members.PushData(members); } } }
public async static Task DoEvent() { var message = Recieved.Message; if (((SocketGuildChannel)message.Channel).Guild.Id != 642864087088234506) { return; } bool isSpam = false; try { var lastMessage = (await message.Channel.GetMessagesAsync(10).FlattenAsync()).Where(x => x.Author.Id == message.Author.Id).ElementAt(1); isSpam = lastMessage.Content == message.Content || (message.CreatedAt.DateTime - lastMessage.CreatedAt.DateTime).Seconds < 5; } catch (Exception) { } if (message.Content.Length == 1 || isSpam || BaseConfig.GetConfig().Channels.BotChannel.Contains(message.Channel.Id)) { return; } var members = Members.PullData(); int memberIndex = Members.GetMemberIndex(members, message.Author.Id.ToString()); if (memberIndex == -1) { memberIndex = members.Count(); members.Add(new Members(message.Author.Id)); } members[memberIndex].XP++; int xp = members[memberIndex].XP; int rankup = 30; byte rank = 0; while (xp >= rankup) { rank++; xp -= rankup; rankup += rankup / 5; } if (rank > members[memberIndex].Rank) { var avatar = message.Author.GetAvatarUrl(); var embed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Rank Up") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/786676132850302996/noun_Graph_2500310.png"); // Graph by Alice Design from the Noun Project }) .WithDescription($"Congratulations **{message.Author.Mention}**! You ranked up.\nNew rank: **{rank}**") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithThumbnailUrl(avatar == null ? message.Author.GetDefaultAvatarUrl() : avatar) .WithColor(new Color(0xFFCC00)).Build(); var channel = BaseConfig.GetConfig().Channels.LevelUp; if (channel != 0) { await((IMessageChannel)Program._client.GetChannel(channel)).SendMessageAsync( null, embed: embed) .ConfigureAwait(false); } await Program.Log($"{message.Author.Username}#{message.Author.Discriminator} ranked up: {rank}"); } if (members[memberIndex].Rank < rank) { members[memberIndex].Rank = rank; members[memberIndex].Floppy++; } Members.PushData(members); }
public async static void DoEvent() { var message = Recieved.Message; bool isSpam = false; try { var lastMessage = (await message.Channel.GetMessagesAsync(10).FlattenAsync()).Where(x => x.Author.Id == message.Author.Id).ElementAt(1); isSpam = lastMessage.Content == message.Content || (message.CreatedAt.DateTime - lastMessage.CreatedAt.DateTime).Seconds < 5; } catch (Exception) { } if (message.Content.Length == 1 || isSpam || BaseConfig.GetConfig().Channels.BotChannel.Contains(message.Channel.Id)) { return; } var members = Members.PullData(); int memberIndex = Members.GetMemberIndex(members, message.Author.Id.ToString()); if (memberIndex == -1) { memberIndex = members.Count(); members.Add(new Members(message.Author.Id)); } members[memberIndex].XP++; int xp = members[memberIndex].XP; int rankup = 30; byte rank = 0; while (xp >= rankup) { rank++; xp -= rankup; rankup += rankup / 5; } if (rank > members[memberIndex].Rank) { await Program.Log("rankup"); var embed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Rank Up") .WithIconUrl("https://cdn.discordapp.com/attachments/781164873458778133/781906580559233034/LevelUp.png"); }) .WithDescription($"Congratulations **{message.Author.Mention}**! You ranked up.\nNew rank: **{rank}**") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithThumbnailUrl(message.Author.GetAvatarUrl()) .WithColor(new Color(0xFFCC00)).Build(); var channels = BaseConfig.GetConfig().Channels.LevelUp; if (channels[0] != 0) { foreach (var id in channels) { await((IMessageChannel)Program._client.GetChannel(id)).SendMessageAsync( null, embed: embed) .ConfigureAwait(false); } } } members[memberIndex].Rank = rank; Members.PushData(members); }
async static void Request(SocketMessage message, SocketRole role) { var requests = PingRequests.PullData(); Random r = new Random(); var pingRequestsChannel = (IMessageChannel)Program._client.GetChannel(BaseConfig.GetConfig().Channels.PingRequests); if (Program.HasPerm(PtanProRoles)) { ulong[] allowedRoles = { 915699684327186452, 915699889399271494, 642999690140450816, 643057615542157325, 915700336080085012, 915700679895556157, 718745058328707144, 656935125610790932, 656935401889464320, 693928850576506962, 915700971697504276, 848142088579448862, 915701267865677904, 656934935978049586 }; if (allowedRoles.Contains(role.Id)) { await message.Channel.SendMessageAsync(role.Mention); await message.Channel.DeleteMessageAsync(message); } else { await message.Channel.SendMessageAsync("❌ No, I will not ping that!"); } return; } var responseEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Ping Request Sent") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782336504462049300/noun_At_7133.png"); // At by Márcio Duarte from the Noun Project }) .WithDescription($"{role.Mention}\nYour request will be reviewed soon") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(role.Color).Build(); var response = await message.Channel.SendMessageAsync(null, embed : responseEmbed); var embedMessage = await pingRequestsChannel.SendMessageAsync(null, embed : new EmbedBuilder().WithDescription("Embed").Build()); var requestEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Ping Request") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/782886030638055464/noun_Plus_1809808.png"); // Plus by sumhi_icon from the Noun Project }) .WithDescription($"{message.Author.Mention} requested to ping {role.Mention} in <#{message.Channel.Id}>.\nStatus: **Waiting...**\n\n Request's link:\n https://discord.com/channels/{((SocketGuildChannel)message.Channel).Guild.Id}/{message.Channel.Id}/{response.Id} \n\nID: `{embedMessage.Id}`") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name).Build(); await embedMessage.ModifyAsync(m => m.Embed = requestEmbed); var mention = await pingRequestsChannel.SendMessageAsync(((SocketGuildChannel)message.Channel).Guild.GetRole(782879567873310740).Mention); // PingRequest role pingelése a moderátorok értesítéséért. await message.Channel.DeleteMessageAsync(message); await pingRequestsChannel.DeleteMessageAsync(mention); requests.Add(new PingRequests(embedMessage.Id, role.Id, message.Channel.Id, requestEmbed.Description)); PingRequests.PushData(requests); }
public async static Task DoCommand() { await Program.Log(); var message = Recieved.Message; string[] m = message.Content.Split(); var commands = new List <Command>(); // Dev commands.Add(new Command("Evaluate", Evaluate.Aliases, Evaluate.Description, Evaluate.Usages, Evaluate.Permission, "Dev", Evaluate.Trello)); commands.Add(new Command("Ping", Ping.Aliases, Ping.Description, Ping.Usages, Ping.Permission, "Dev", Ping.Trello)); commands.Add(new Command("Restart", Restart.Aliases, Restart.Description, Restart.Usages, Restart.Permission, "Dev", Restart.Trello)); commands.Add(new Command("Test", Test.Aliases, Test.Description, Test.Usages, Test.Permission, "Dev", Test.Trello)); // Fun commands.Add(new Command("Math", MathEval.Aliases, MathEval.Description, MathEval.Usages, MathEval.Permission, "Fun", MathEval.Trello)); commands.Add(new Command("Minesweeper", Minesweeper.Aliases, Minesweeper.Description, Minesweeper.Usages, Minesweeper.Permission, "Fun", Minesweeper.Trello)); // Info commands.Add(new Command("Commands", Commands.Aliases, Commands.Description, Commands.Usages, Commands.Permission, "Info", Commands.Trello)); commands.Add(new Command("EmojiList", EmojiList.Aliases, EmojiList.Description, EmojiList.Usages, EmojiList.Permission, "Info", EmojiList.Trello)); commands.Add(new Command("Leaderboard", Leaderboard.Aliases, Leaderboard.Description, Leaderboard.Usages, Leaderboard.Permission, "Info", Leaderboard.Trello)); commands.Add(new Command("UserInfo", UserInfo.Aliases, UserInfo.Description, UserInfo.Usages, UserInfo.Permission, "Info", UserInfo.Trello)); // Mod commands.Add(new Command("Placeholder", new string[] { }, "", new string[] { }, "", "Mod", "")); // Music commands.Add(new Command("Placeholder", new string[] { }, "", new string[] { }, "", "Music", "")); // Util commands.Add(new Command("AnswerRequest", AnswerRequest.Aliases, AnswerRequest.Description, AnswerRequest.Usages, AnswerRequest.Permission, "Util", AnswerRequest.Trello)); commands.Add(new Command("PingRequest", PingRequest.Aliases, PingRequest.Description, PingRequest.Usages, PingRequest.Permission, "Util", PingRequest.Trello)); commands.Add(new Command("Store", Store.Aliases, Store.Description, Store.Usages, Store.Permission, "Util", Store.Trello)); var embed = new EmbedBuilder() .WithAuthor(author => { author.WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/801852346350174208/noun_Information_405516.png"); }) // Information by Viktor Ostrovsky from the Noun Project .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x7289DA)); switch (m.Length) { case 1: embed.WithAuthor(author => { author.WithName("Commands"); }); embed.WithDescription($"For more information use `{BaseConfig.GetConfig().Prefix}commands [command]`.\n" + "Official Documentation on [Trello](https://trello.com/b/Ns1WcpEB/groundedbot)."); var categories = new HashSet <string>(); foreach (var i in commands) { categories.Add(i.Category); } foreach (var category in categories) { string content = "```\n"; var currentCategory = commands.Where(x => x.Category == category).ToList(); for (int j = 0; j < currentCategory.Count(); j++) { content += $"{currentCategory[j].Name}\n"; } for (int j = 0; j < commands.GroupBy(x => x.Category).OrderBy(x => x.Count()).Last().Count() - currentCategory.Count(); j++) { content += " \n"; } content += "```"; embed.AddField(category, content, true); } await message.Channel.SendMessageAsync(null, embed : embed.Build()); break; case 2: List <Command> foundCommands; foundCommands = commands.Where(x => x.Aliases.Contains(m[1].ToLower())).ToList(); if (foundCommands.Count < 1) { return; } foreach (var command in foundCommands) { embed.WithAuthor(author => { author.WithName(command.Name); }); string content = ""; content += $"Category: **{command.Category}**\n" + $"{command.Description}\n" + $"{command.Permission}\n\n" + $"**Usage{(command.Usages.Length > 1 ? "s:\n" : ": ")}**"; foreach (var usage in command.Usages) { content += $"`{BaseConfig.GetConfig().Prefix}{usage}`\n"; } content += $"\n**Aliases:** "; for (int j = 0; j < command.Aliases.Count(); j++) { content += $"`{command.Aliases[j]}`{(j < command.Aliases.Count() - 1 ? ", " : "\n\n")}"; } content += $"Official Documentation on [Trello]({command.Trello})."; embed.WithDescription(content); await message.Channel.SendMessageAsync(null, embed : embed.Build()); } break; default: await message.Channel.SendMessageAsync("❌ Too many parameters!"); return; } }
public async static Task DoCommand() { await Program.Log(); var message = Recieved.Message; string[] m = message.Content.Split(); var r = new Random(); var embed = new EmbedBuilder().WithColor(new Color(0xFFDD00)); if (m.Length > 2) { await message.Channel.SendMessageAsync("❌ Too many parameters!"); } else if (m.Length == 1) { embed.WithAuthor(author => { author.WithName("Avaliable emojis"); }); foreach (var i in Program._client.Guilds.Where(x => x.Name.Contains("Emojis")).OrderBy(x => x.Name)) { string emojis = ""; for (int j = 0; j < 3; j++) { for (int k = 0; k < 4; k++) { emojis += $"{i.Emotes.ElementAt(r.Next(0, i.Emotes.Count()))} "; } emojis += "\n"; } embed.AddField(i.Name, emojis, true); } embed.WithDescription($"For more use `{BaseConfig.GetConfig().Prefix}emojilist [category]`"); } else { SocketGuild server; try { server = Program._client.Guilds.First(x => x.Name.ToLower() == m[1].ToLower()); embed.WithAuthor(author => { author.WithName(server.Name); }); } catch (Exception) { return; } if (server == null) { return; } var emotes = server.Emotes.Where(x => !x.Animated).OrderBy(x => x.Name); var animatedEmotes = server.Emotes.Where(x => x.Animated).OrderBy(x => x.Name); for (int i = 0; i < Math.Ceiling(emotes.Count() / 25.0); i++) { string output = ""; int counter = 0; int emoteCount = 0; foreach (var j in emotes.Skip(i * 25)) { emoteCount++; counter++; output += counter % 5 == 0 && counter != 0 ? $"{j}\n" : j.ToString(); if (emoteCount >= 25) { break; } } embed.AddField("Emotes", output, true); } for (int i = 0; i < Math.Ceiling(animatedEmotes.Count() / 25.0); i++) { string output = ""; int counter = 0; int emoteCount = 0; foreach (var j in animatedEmotes.Skip(i * 25)) { emoteCount++; counter++; output += counter % 5 == 0 && counter != 0 ? $"{j}\n" : j.ToString(); if (emoteCount >= 25) { break; } } embed.AddField("Animated", output, true); } embed.WithDescription($"[Server Invite]({server.GetInvitesAsync().Result.FirstOrDefault().Url})"); } embed.WithFooter(((SocketGuildChannel)message.Channel).Guild.Name); await message.Channel.SendMessageAsync(null, embed : embed.Build()); }
private Task MessageHandler(SocketMessage message) { string firstWord = message.Content.Split()[0]; bool pong = message.Author.Id == _client.CurrentUser.Id && firstWord == "Pinging..."; if (pong || (!message.Author.IsBot && !message.Author.IsWebhook)) { Recieved.Message = message; } else { return(Task.CompletedTask); } try { // Events BotMention.DoEvent().Wait(); Emojify.DoEvent().Wait(); Xp.DoEvent().Wait(); if (pong) { Ping.DoCommand(true).Wait(); } if (!message.Content.StartsWith(BaseConfig.GetConfig().Prefix) || message.Author.IsBot) { return(Task.CompletedTask); } string command = firstWord.Substring(1, firstWord.Length - 1).ToLower(); // Commands // Dev if (Evaluate.Aliases.Contains(command) && HasPerm(Evaluate.AllowedRoles)) { Evaluate.DoCommand().Wait(); } if (Ping.Aliases.Contains(command) && BotChannel()) { Ping.DoCommand(false).Wait(); } if (Restart.Aliases.Contains(command) && BotChannel() && HasPerm(Restart.AllowedRoles)) { Restart.DoCommand().Wait(); } if (Test.Aliases.Contains(command) && BotChannel() && HasPerm(Test.AllowedRoles)) { Test.DoCommand().Wait(); } // Fun if (Minesweeper.Aliases.Contains(command) && BotChannel()) { Minesweeper.DoCommand().Wait(); } if (MathEval.Aliases.Contains(command) && BotChannel()) { MathEval.DoCommand().Wait(); } // Info if (Commands.Commands.Aliases.Contains(command) && BotChannel()) { Commands.Commands.DoCommand().Wait(); } if (EmojiList.Aliases.Contains(command) && BotChannel()) { EmojiList.DoCommand().Wait(); } if (Leaderboard.Aliases.Contains(command) && BotChannel()) { Leaderboard.DoCommand().Wait(); } if (UserInfo.Aliases.Contains(command) && BotChannel()) { UserInfo.DoCommand().Wait(); } // Util if (AnswerRequest.Aliases.Contains(command)) { AnswerRequest.DoCommand().Wait(); } if (PingRequest.Aliases.Contains(command)) { PingRequest.DoCommand().Wait(); } if (Store.Aliases.Contains(command) && BotChannel()) { Store.DoCommand().Wait(); } } catch (Exception e) { foreach (var i in BaseConfig.GetConfig().Channels.BotTerminal) { ((IMessageChannel)_client.GetChannel(i)).SendMessageAsync($"```{e}```"); } } return(Task.CompletedTask); }
public static async Task DoEvent() { var message = Recieved.Message; ulong id = Program._client.CurrentUser.Id; if (!((message.Content == $"<@!{id}>" || message.Content == $"<@{id}>") && Program.BotChannel())) { return; } char prefix = BaseConfig.GetConfig().Prefix; string responseString = ""; List <EmbedFieldBuilder> fieldBuilders = new List <EmbedFieldBuilder>(); Embed contEmbed; using (var httpClient = new HttpClient()) { using (var request = new HttpRequestMessage(new HttpMethod("GET"), BaseConfig.GetConfig().GithubRepoUrl)) { var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes($"username:{BaseConfig.GetConfig().GithubToken}")); request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}"); request.Headers.TryAddWithoutValidation("Accept", "application/vnd.github.v3+json"); request.Headers.UserAgent.Add(new ProductInfoHeaderValue("GroundedBot", "1.0")); request.Headers.UserAgent.Add(new ProductInfoHeaderValue("(+https://github.com/ExAtom/GroundedBot)")); var response = httpClient.SendAsync(request).Result; using (StreamReader reader = new StreamReader(response.Content.ReadAsStream())) { responseString = reader.ReadToEnd(); } } } try { //looping through the response of the GitHub API JArray Response = JArray.Parse(responseString); foreach (JObject Contributor in Response) { fieldBuilders.Add(new EmbedFieldBuilder().WithIsInline(false) .WithName(Contributor["login"].ToString()) .WithValue(Contributor["html_url"].ToString())); } } catch (Exception e) { foreach (var i in BaseConfig.GetConfig().Channels.BotTerminal) { await((IMessageChannel)Program._client.GetChannel(i)).SendMessageAsync($"```{e}```"); await((IMessageChannel)Program._client.GetChannel(i)).SendMessageAsync($"```{responseString.Substring(0, 1994)}```"); } } if (fieldBuilders.Count == 0) { contEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Contributors of the GroundedBot project") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/801852346350174208/noun_Information_405516.png"); // Information by Viktor Ostrovsky from the Noun Project }) .WithDescription("Cannot communicate to the GitHub API :cry:") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x7289DA)).Build(); } else { contEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Contributors of the GroundedBot project") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/801852346350174208/noun_Information_405516.png"); // Information by Viktor Ostrovsky from the Noun Project }) .WithFields(fieldBuilders) .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x7289DA)).Build(); } var infoEmbed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Information about the Bot") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/801852346350174208/noun_Information_405516.png"); // Information by Viktor Ostrovsky from the Noun Project }) .WithDescription($"" + $"Hi, I'm the main Bot of the **ProgramTan** server! I have many features, you can see them with `{prefix}commands`.\n" + $"My prefix is: `{prefix}`\n" + $"Github repository: https://github.com/ExAtom/GroundedBot \n" + $"Trello board: https://trello.com/b/Ns1WcpEB/groundedbot") .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x7289DA)).Build(); if ((message.Content == $"<@!{id}>" || message.Content == $"<@{id}>") && Program.BotChannel()) { await message.Channel.SendMessageAsync( null, embed : infoEmbed) .ConfigureAwait(false); await message.Channel.SendMessageAsync( null, embed : contEmbed) .ConfigureAwait(false); } }
protected T GetConfig <T>() where T : BaseConfig { return(BaseConfig.GetConfig <T>(this.ConfigReader, this.ConfigOverrides, this.ConfigFileOverride, this.ConfigNames)); }
public async static Task DoCommand() { await Program.Log(); var message = Recieved.Message; string[] m = message.Content.Split(); var members = Members.PullData(); var items = Items.PullData(); string output = ""; if (m.Length == 1) { output += $"Buying something works like this: `{BaseConfig.GetConfig().Prefix}store buy <itemName>`.\n\n"; foreach (var i in items) { output += $"**{i.Name}** - **{i.Price}**:floppy_disk:{(i.Type == "ptan+" ? "/month" : "")}\n" + $"*{i.Description}*\n" + $"__You get:__\n"; foreach (var j in i.YouGet) { output += $" - {j}\n"; } output += "\n"; } if (items.Count == 0) { output += "Wow, such empty!"; } var embed = new EmbedBuilder() .WithAuthor(author => { author .WithName("Store") .WithIconUrl("https://cdn.discordapp.com/attachments/782305154342322226/808302834738135060/noun_Store_840490.png"); // Store by Gregor Cresnar from the Noun Project }) .WithDescription(output) .WithFooter(((SocketGuildChannel)message.Channel).Guild.Name) .WithColor(new Color(0x067BCE)).Build(); await message.Channel.SendMessageAsync(null, embed : embed); } else if (m[1] == "buy") { if (m.Length == 2) { await message.Channel.SendMessageAsync("Please specify an item you want to buy!"); return; } SocketRole role = null; foreach (var i in ((SocketGuildChannel)message.Channel).Guild.GetUser(message.Author.Id).Roles) { if (!BaseConfig.GetConfig().Roles.Mod.Contains(i.Id)) { if (BaseConfig.GetConfig().Roles.PtanB.Contains(i.Id) || BaseConfig.GetConfig().Roles.PtanS.Contains(i.Id) || BaseConfig.GetConfig().Roles.PtanP.Contains(i.Id)) { role = i; break; } } } Members member = members[Members.GetMemberIndex(members, message.Author.Id.ToString())]; Items item = null; try { item = items[items.IndexOf(items.Find(x => x.Name.ToLower() == m[2].ToLower()))]; } catch (Exception) { await message.Channel.SendMessageAsync("❌ Unkown item!"); } if (item == null) { await message.Channel.SendMessageAsync("❌ Unkown item!"); return; } if (member.Floppy < item.Price) { await message.Channel.SendMessageAsync("❌ You don't have enough :floppy_disk:!"); return; } if (item.Type == "ptan+") { if (!((item.Name.ToLower() == "ptan+budget" && role == null) || (item.Name.ToLower() == "ptan+standard" && (role == null || !BaseConfig.GetConfig().Roles.PtanB.Contains(role.Id))) || (item.Name.ToLower() == "ptan+pro" && (role == null || !BaseConfig.GetConfig().Roles.PtanB.Contains(role.Id) || !BaseConfig.GetConfig().Roles.PtanS.Contains(role.Id))))) { await message.Channel.SendMessageAsync($"❌ You already have {role.Name}!"); return; } } Purchase(item); } }