private async Task HandleCommandAsync(SocketMessage s) { if (!(s is SocketUserMessage msg)) { return; } SocketCommandContext context = new SocketCommandContext(_client, msg); int argPos = 0; if (!context.User.IsBot) { // Commands if (msg.HasCharPrefix(prefix, ref argPos)) { var result = await _commands.ExecuteAsync(context, argPos, _services); if (!result.IsSuccess && result.Error != CommandError.UnknownCommand) { await context.Channel.SendMessageAsync($"Error: {result.ErrorReason}"); } } // InterServer Chat else if (Program.interServerChats.ContainsKey(context.Guild.Id) && Program.interServerChats[context.Guild.Id] == context.Channel.Id) { string fileName = ""; EmbedBuilder embed = new EmbedBuilder(); embed.WithAuthor(msg.Author); embed.WithDescription(msg.Content); foreach (Attachment a in msg.Attachments) { if (a.Url.EndsWith(".png") || a.Url.EndsWith(".jpg")) { embed.WithImageUrl(a.Url); } else { WebClient wc = new WebClient(); Uri uri = new Uri(a.Url); string[] extension = a.Url.Split('.', '/'); fileName = $"{extension[extension.Length - 2]}-(1).{extension[extension.Length - 1]}"; await wc.DownloadFileTaskAsync(uri, fileName); } } EmbedBuilder embedGuild = new EmbedBuilder(); embedGuild.WithAuthor(msg.Author); embedGuild.WithDescription(msg.Content); foreach (Attachment a in msg.Attachments) { if (a.Url.EndsWith(".png") || a.Url.EndsWith(".jpg") || a.Url.EndsWith(".jpeg") || a.Url.EndsWith(".gif")) { embed.WithImageUrl(a.Url); } } if (Program.broadcastServerName.Contains(context.Guild.Id)) { EmbedFooterBuilder footer = new EmbedFooterBuilder(); footer.WithIconUrl(context.Guild.IconUrl); footer.WithText($"{context.Guild.Name } [{context.Guild.Id}]"); embedGuild.WithFooter(footer); } List <Task> sendMessage = new List <Task>(); List <Task> sendFile = new List <Task>(); foreach (ulong serverID in Program.interServerChats.Keys.ToList()) { SocketGuild guild = context.Client.GetGuild(serverID); if (guild != null) { SocketTextChannel chan = guild.GetTextChannel(Program.interServerChats[serverID]); if (serverID != context.Guild.Id && chan != null && PermissionChecker.HasSend(guild, chan)) { bool sendMsg = true; bool wlEnabled = Program.wlEnable.Contains(context.Guild.Id); // Host server-side if (wlEnabled && Program.ischatWhitelist.ContainsKey(context.Guild.Id)) { if (!Program.ischatWhitelist[context.Guild.Id].Contains(serverID)) { sendMsg = false; } } else if (wlEnabled) { sendMsg = false; } else if (Program.ischatBlacklist.ContainsKey(context.Guild.Id)) { if (Program.ischatBlacklist[context.Guild.Id].Contains(serverID)) { sendMsg = false; } } // Receiving server-side if (sendMsg) { wlEnabled = Program.wlEnable.Contains(serverID); if (wlEnabled && Program.ischatWhitelist.ContainsKey(serverID)) { if (!Program.ischatWhitelist[serverID].Contains(context.Guild.Id)) { sendMsg = false; } } else if (wlEnabled) { sendMsg = false; } else if (Program.ischatBlacklist.ContainsKey(serverID)) { if (Program.ischatBlacklist[serverID].Contains(context.Guild.Id)) { sendMsg = false; } } } if (sendMsg) { if (Program.showUserServer.Contains(serverID)) { sendMessage.Add(chan.SendMessageAsync("", false, embedGuild.Build())); if (fileName.Length == 0) { sendFile.Add(chan.SendFileAsync(fileName, "")); } } else { sendMessage.Add(chan.SendMessageAsync("", false, embed.Build())); if (fileName.Length == 0) { sendFile.Add(chan.SendFileAsync(fileName, "")); } } } } } } await Task.WhenAll(sendMessage.ToArray()).ContinueWith(t => Task.WhenAll(sendFile.ToArray()).ContinueWith(r => Task.Run(() => { if (fileName.Length == 0) { System.IO.File.Delete(fileName); } }))); } } }