public async Task ProfanityClear(DiscordChannel channel, DiscordMessage userMsg) { var profanityEmbed = new DiscordEmbedBuilder() .WithTitle("Profanity found") .WithDescription("Your message contained profanity, couldn't send it") .WithColor(DiscordColor.Red) .Build(); var errSent = await channel.SendMessageAsync(profanityEmbed); await Task.Delay(1000); await channel.DeleteMessageAsync(errSent).ConfigureAwait(false); await channel.DeleteMessageAsync(userMsg).ConfigureAwait(false); }
static async Task DeleteChnMessages(DiscordChannel channel) { Console.WriteLine($"Deleting messages...", Color.Green); ulong?first = null; int cnt = 0; do { var messages = await channel.GetMessagesAsync(100, first); if (messages.Count == 0) { break; } var ownMessages = messages.Where(k => k.Author.Id == client.CurrentUser.Id); cnt += ownMessages.Count(); first = messages.Last().Id; foreach (var message in ownMessages) { await channel.DeleteMessageAsync(message); } }while (first.HasValue); Console.WriteLine($"Deleted {cnt} messages!", Color.Green); }
public static async Task UpdateStandingsAsync() { DiscordChannel standingChannel = await Client.GetChannelAsync(592230066654674945); foreach (DiscordMessage discordMessage in await standingChannel.GetMessagesAsync()) { await standingChannel.DeleteMessageAsync(discordMessage, "Standings update."); } SdlPlayer[] players = await MySqlClient.RetrieveAllSdlPlayers(); List <SdlPlayer> orderedPlayers = players .Where(x => standingChannel.Guild.Members.Any(y => y.Id == x.DiscordId && MySqlClient.CheckHasPlayedSet(x).Result&& y.Roles.Any(z => z.Name.Equals("player", StringComparison.InvariantCultureIgnoreCase)))) .OrderByDescending(x => x.PowerLevel).ToList(); var playerStandings = orderedPlayers.Select(x => new { Player = x, Rank = orderedPlayers.FindLastIndex(y => y.PowerLevel == x.PowerLevel) + 1 }); List <DiscordEmbedBuilder> standingEmbeds = new List <DiscordEmbedBuilder> { new DiscordEmbedBuilder().WithDescription("").WithColor(Color.Gold) }; int startStanding = 1; int endStanding = 0; foreach (var playerStanding in playerStandings) { string standingLine = $"\n{playerStanding.Rank}: {playerStanding.Player.DiscordId.ToUserMention()} [{playerStanding.Player.PowerLevel}]"; if (standingEmbeds.Last().Description.Length + standingLine.Length > 2048) { standingEmbeds.Last().Title = $"Standings ({startStanding} - {endStanding})"; standingEmbeds.Add(new DiscordEmbedBuilder().WithDescription("").WithColor(Color.Silver)); startStanding = endStanding + 1; endStanding = startStanding; } standingEmbeds.Last().Description += standingLine; endStanding++; } standingEmbeds.Last().Title = $"Standings ({startStanding} - {endStanding})"; foreach (DiscordEmbedBuilder standingEmbed in standingEmbeds) { await standingChannel.SendMessageAsync(embed : standingEmbed.Build()); } }
private async Task CleanUp(DiscordChannel channel, DiscordMessage afterMessage) { var messages = await channel.GetMessagesAfterAsync(afterMessage.Id); if (messages.Count > 1) { await channel.DeleteMessagesAsync(messages); } await channel.DeleteMessageAsync(afterMessage); }
private async Task UnSoftbanEndedStreamsAsync(IEnumerable <Stream> streams, List <DiscordMessage> messages) { // If the cached stream id's isn't in the fetched stream id, it is an ended stream var streamIds = streams.Select(x => x.Id); var endedStreams = _cachedStreamsIds.Where(x => !streamIds.Contains(x.Key)); foreach (var(endedStreamId, messageId) in endedStreams) { // If the stream was soft banned, remove it if (_streamSoftBanList.Contains(endedStreamId)) { _streamSoftBanList.Remove(endedStreamId); } try { var message = messages.FirstOrDefault(x => x.Id == messageId); if (message == null) { continue; } await _textChannel.DeleteMessageAsync(message); messages.Remove(message); } catch { _logger.Warning("StreamMonitorService: Tried to delete message " + messageId + " but it does not exist."); } _cachedStreamsIds.Remove(endedStreamId); } }
private static async Task Backtrack(DiscordChannel channel, DiscordMessage message, bool removeFromQueue) { if (channel.IsPrivate) { return; } if (message?.Author == null) { return; } if (message.Author.IsCurrent) { return; } if (!Throttling.TryGetValue(channel.Id, out List <DiscordMessage> msgList)) { return; } if (msgList.Any(m => m.Id == message.Id)) { var botMsg = msgList.Last(); if (botMsg.Id == message.Id) { return; } try { await channel.DeleteMessageAsync(botMsg).ConfigureAwait(false); if (removeFromQueue) { MessageQueue.TryRemove(message.Id, out _); } } catch { } } }
private async Task WaitForCancellationAsync() { while (!_cts.IsCancellationRequested) { if (!Ready) { await Task.Delay(TimeSpan.FromMilliseconds(500)); continue; } lock (_lockerObject) { Task.Run(async() => { while (Ready) { if (DateTime.Now >= _nextStatusCheck) { _nextStatusCheck = DateTime.Now + Program.Config.UpdateDelay; try { var request = (HttpWebRequest)WebRequest.Create(Program.Config.StatusURL); request.ContentType = "application/json"; request.Credentials = CredentialCache.DefaultCredentials; var res = request.GetResponse(); var serverList = new List <ServerModel>(); await using (var stream = res.GetResponseStream()) { if (stream != null) { using var reader = new StreamReader(stream); var result = await reader.ReadToEndAsync(); serverList = JsonConvert.DeserializeObject <List <ServerModel> >(result); } } res.Close(); res.Dispose(); foreach (var serverModel in serverList) { if (await Program.ServerStatusRepository.EntryExists(Convert.ToInt32(serverModel.Id))) { var model = await Program.ServerStatusRepository.FindById( Convert.ToInt32(serverModel.Id)); model.CurrentStatus.EditTime = DateTime.Now; model.CurrentStatus.Online = serverModel.Online == "1"; model.CurrentStatus.UserCount = Convert.ToInt32(serverModel.UserCount); model.History = new List <ServerEntryStatusHistory> { new ServerEntryStatusHistory { EntryTime = DateTime.Now, Id = Guid.NewGuid(), Online = serverModel.Online == "1", ServerId = model.Id, UserCount = model.CurrentStatus.UserCount } }; await Program.ServerStatusRepository.UpdateCurrentStatusAsync(model); } else { var model = new ServerEntry { CurrentStatus = new ServerEntryStatus(), ExpRate = serverModel.EXPRate, Id = Guid.NewGuid(), RgbColor = "rgb(0, 0, 0)", ServerId = Convert.ToInt32(serverModel.Id), ServerName = serverModel.Name, ServerType = serverModel.Type }; model.CurrentStatus.Id = Guid.NewGuid(); model.CurrentStatus.EditTime = DateTime.Now; model.CurrentStatus.Online = serverModel.Online == "1"; model.CurrentStatus.UserCount = Convert.ToInt32(serverModel.UserCount); model.History = new List <ServerEntryStatusHistory> { new ServerEntryStatusHistory { EntryTime = DateTime.Now, Id = Guid.NewGuid(), Online = serverModel.Online == "1", ServerId = model.Id, UserCount = model.CurrentStatus.UserCount } }; await _serverStatusRepository.AddServerAsync(model); } } } catch (Exception e) { Program.Log(e); } } if (DateTime.Now < _nextOutputTime) { await Task.Delay(500); continue; } _nextOutputTime = DateTime.Now + Program.Config.OutputDelay; try { var models = await _serverStatusRepository.GetAllAsync(); models = models.OrderByDescending(a => a.CurrentStatus.Online) .ThenByDescending(a => a.CurrentStatus.UserCount != -1) .ThenByDescending(a => a.CurrentStatus.UserCount).ToList(); var temp = "```md\r\n"; foreach (var serverEntry in models) { temp += Program.Config.OutputFormat .Replace("$SERVERNAME$", serverEntry.ServerName) .Replace("$STATUS$", serverEntry.CurrentStatus.Online ? "Online" : "Offline") .Replace("$USERCOUNT$", $"{serverEntry.CurrentStatus.UserCount}"); if (!temp.EndsWith("\r\n")) { temp += "\r\n"; } } temp += "```"; if (_lastMessage != null) { await _channel.DeleteMessageAsync(_lastMessage); } else { var currentMessages = await _channel.GetMessagesAsync(); if (currentMessages != null) { await _channel.DeleteMessagesAsync(currentMessages); } } _lastMessage = await _channel.SendMessageAsync(temp); } catch (Exception e) { Program.Log(e); } await Task.Delay(500); } }); } await Task.Delay(-1); } }
private async void Clear(object sender, RoutedEventArgs e) { try { if (IsDirect.IsChecked ?? false) { DiscordGuild server; ulong serverId = Convert.ToUInt64(GuildId.Text); if (MainWindow.userClient.Guilds.TryGetValue(serverId, out server)) { ulong channelIdVal = Convert.ToUInt64(ChannelId.Text); try { DiscordMember dmUser = await server.GetMemberAsync(channelIdVal); DiscordDmChannel dm = await dmUser.CreateDmChannelAsync(); if (dm != null) { int msgCount; ulong startClear; if (!int.TryParse(ClearCount.Text, out msgCount)) { MessageBox.Show("Неправильное кол-во ссобщений."); } if (!ulong.TryParse(ClearerMsgId.Text, out startClear)) { MessageBox.Show("Неправильный ID сообщения."); } try { toClear = (await dm.GetMessagesAsync(msgCount, startClear)).Where(ex => ex.Author == MainWindow.userClient.CurrentUser).ToList(); MessageBoxResult result = MessageBox.Show($"Вы действительно хотите удалить свои {toClear.Count} сообщений в DM с \"{dmUser.Username}\" начиная с сообщения \"{toClear.Last().Content}\" и заканчивая \"{toClear.First().Content}\"?", "Ожидание подтверждения", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); if (result == MessageBoxResult.No) { MessageBox.Show("Удаление отменено."); return; } foreach (DiscordMessage msg in toClear) { try { await dm.DeleteMessageAsync(msg); Thread.Sleep(1300); } catch (Exception) { Thread.Sleep(600); } } } catch (Exception) { MessageBox.Show("Какая-то ошибка."); } } else { MessageBox.Show("Ошибка: неверный ID пользователя."); } } catch (Exception) { MessageBox.Show("Ошибка: неверный ID пользователя."); } } } else { DiscordGuild server; ulong serverId = Convert.ToUInt64(GuildId.Text); if (MainWindow.userClient.Guilds.TryGetValue(serverId, out server)) { ulong channelIdVal = Convert.ToUInt64(ChannelId.Text); try { DiscordChannel channel = server.GetChannel(channelIdVal); if (channel != null) { int msgCount; ulong startClear; if (!int.TryParse(ClearCount.Text, out msgCount)) { MessageBox.Show("Неправильное кол-во ссобщений."); } if (!ulong.TryParse(ClearerMsgId.Text, out startClear)) { MessageBox.Show("Неправильный ID сообщения."); } try { if ((OnlyMine.IsChecked ?? false) == false) { toClear = (await channel.GetMessagesAsync(msgCount, startClear)).ToList(); } else { toClear = (await channel.GetMessagesAsync(msgCount, startClear)).Where(ex => ex.Author == MainWindow.userClient.CurrentUser).ToList(); } MessageBoxResult result = MessageBox.Show($"Вы действительно хотите удалить {toClear.Count}{((OnlyMine.IsChecked ?? false)?" своих":"")} сообщений в канале \"{channel.Name}\" на сервере \"{server.Name}\" начиная с сообщения \"{toClear.Last().Content}\" и заканчивая \"{toClear.First().Content}\"?", "Ожидание подтверждения", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); if (result == MessageBoxResult.No) { MessageBox.Show("Удаление отменено."); return; } foreach (DiscordMessage msg in toClear) { try { await channel.DeleteMessageAsync(msg); Thread.Sleep(1300); } catch (Exception) { Thread.Sleep(600); } } } catch (Exception) { MessageBox.Show("Какая-то ошибка."); } } else { MessageBox.Show("Ошибка: неверный ID канала."); } } catch (Exception) { MessageBox.Show("Ошибка: неверный ID канала."); } } else { MessageBox.Show("Ошибка: неверный ID сервера."); } } } catch (Exception) { return; } }