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);
        }
예제 #2
0
        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());
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        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 { }
            }
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
        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; }
        }