コード例 #1
0
ファイル: ModerationCommands.cs プロジェクト: Oleuua/sotbot
        public static async void Warn(DiscordClient client, DiscordMember moderator, DiscordGuild guild,
                                      DiscordMember member, string reason)
        {
            //if (!UserList.Users.ContainsKey(member.Id)) User.Create(member.Id);

            var id   = RandomString.NextString(6);
            var date = DateTime.Now;

            var message = await guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync
                              ("**Предупреждение**\n\n" +
                              $"**От:** {moderator}\n" +
                              $"**Кому:** {member}\n" +
                              $"**Дата:** {date}\n" +
                              $"**ID предупреждения:** {id}\n" +
                              $"**Количество предупреждений:** {WarnSQL.GetForUser(member.Id).Count + 1}\n" +
                              $"**Причина:** {reason}");

            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":pencil2:"));
            //await message.CreateReactionAsync(DiscordEmoji.FromName(client, ":no_entry:"));
            var warn = WarnSQL.Create(id, member.Id, moderator.Id, reason, date, message.Id);

            try
            {
                await member.SendMessageAsync("Вы получили предупреждение от модератора " +
                                              $"**{moderator.Username}#{moderator.Discriminator}**. Причина: {reason}. " +
                                              $"ID предупреждения: `{id}`");
            }
            catch (UnauthorizedException)
            {
                //user can block the bot
            }
        }
コード例 #2
0
            public async Task WList(CommandContext ctx, [Description("Пользователь")] DiscordUser user)
            {
                var warnings = WarnSQL.GetForUser(user.Id);
                int count    = warnings.Count;

                if (count == 0)
                {
                    await ctx.RespondAsync("*Предупреждения отсутствуют.*");

                    return;
                }

                var interactivity = ctx.Client.GetInteractivity();

                List <Utility.CustomEmbedField> fields = new List <Utility.CustomEmbedField>();

                for (var i = count; i > 0; i--)
                {
                    var warn = warnings[i - 1];
                    fields.Add(new Utility.CustomEmbedField($"*{i}*.",
                                                            $"**ID:** {warn.Id}\n**Причина:** {warn.Reason} \n **Выдан:** {await ctx.Client.GetUserAsync(warn.Moderator)} {warn.Date.ToShortDateString()}"));
                }


                var fields_pagination = Utility.GeneratePagesInEmbeds(fields, "Список варнов.");

                if (fields_pagination.Count() > 1)
                {
                    await interactivity.SendPaginatedMessageAsync(ctx.Channel, ctx.User, fields_pagination, timeoutoverride : TimeSpan.FromMinutes(5));
                }
                else
                {
                    await ctx.RespondAsync(embed : fields_pagination.First().Embed);
                }
            }
コード例 #3
0
        public async Task Warn(CommandContext ctx, DiscordUser user, [RemainingText] string reason = "Не указана")
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            var id = RandomString.NextString(6);

            var warnsCount = WarnSQL.GetForUser(user.Id).Count + 1;

            var message = await ctx.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync
                              ("**Предупреждение**\n\n" +
                              $"**От:** {ctx.User}\n" +
                              $"**Кому:** {user.Username}#{user.Discriminator}\n" +
                              $"**Дата:** {DateTime.Now}\n" +
                              $"**ID предупреждения:** {id}\n" +
                              $"**Количество предупреждений:** {warnsCount}\n" +
                              $"**Причина:** {reason}");

            WarnSQL.Create(id, user.Id, ctx.Member.Id, reason, DateTime.Now, message.Id);

            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно выдано предупреждение {user.Username}#{user.Discriminator}! Количество предупреждений: **{warnsCount}**");
        }
コード例 #4
0
ファイル: ModerationCommands.cs プロジェクト: Oleuua/sotbot
        public async Task Unwarn(CommandContext ctx, string id)
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            var warn = WarnSQL.Get(id);

            if (warn == null)
            {
                await ctx.RespondAsync(
                    $"{Bot.BotSettings.ErrorEmoji} Не найдено предупреждение с таким идентификатором.");

                return;
            }

            WarnSQL.Delete(warn.Id);
            var member = await ctx.Client.GetUserAsync(warn.User);

            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно удалено предупреждение с **{member.Username}#{member.Discriminator}**!");

            await ctx.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Снятие предупреждения**\n\n" +
                $"**Администратор:** {ctx.Member}\n" +
                $"**Пользователь:** {member}\n" +
                $"**Дата:** {DateTime.Now}\n" +
                $"**ID предупреждения:** {id}\n" +
                $"**Количество предупреждений:** {WarnSQL.GetForUser(member.Id).Count}\n");

            try
            {
                var gMember = await ctx.Guild.GetMemberAsync(member.Id);

                await gMember.SendMessageAsync(
                    $"Администратор **{ctx.Member.Username}** снял ваше предупреждение с ID `{id}`");
            }
            catch (UnauthorizedException)
            {
                //user can block the bot
            }
            catch (NotFoundException)
            {
                //user is not a guild member
            }
        }
コード例 #5
0
            public async Task WhoIs(CommandContext ctx, [Description("Пользователь"), RemainingText] DiscordUser user)
            {
                if (user.Id == 261137595965243393)
                {
                    Random random = new Random();
                    int    value  = random.Next(100);
                    if (value < 30)
                    {
                        await ctx.RespondAsync("https://media.giphy.com/media/eKrgVyZ7zLvJrgZNZn/giphy.gif");

                        return;
                    }
                }

                await ctx.TriggerTypingAsync();

                try
                {
                    DiscordMember member = null;
                    try
                    {
                        member = await ctx.Guild.GetMemberAsync(user.Id);
                    }
                    catch (NotFoundException)
                    {
                        // is not a member of the guild
                    }

                    //Сбор информации в переменные
                    var ban       = GetBansInfo(user.Id);
                    var warnings  = WarnSQL.GetForUser(user.Id).Count;
                    var reports   = ReportSQL.GetForUser(user.Id);
                    var webUser   = WebUser.GetByDiscordId(user.Id);
                    var voiceTime = VoiceListener.GetUpdatedVoiceTime(user.Id);

                    //Создание эмбеда
                    var embed = new DiscordEmbedBuilder();
                    embed.WithAuthor($"{user.Username}#{user.Discriminator}", iconUrl: user.AvatarUrl);
                    embed.WithThumbnail(user.AvatarUrl);

                    //Статус на сервере
                    if (ban != null)
                    {
                        embed.WithColor(new DiscordColor("#c0392b"));
                        embed.WithDescription($"Забанен до {ban}.");
                    }
                    else if (member == null)
                    {
                        embed.WithColor(new DiscordColor("#e67e22"));
                        embed.WithDescription("Не является участником.");
                    }
                    else
                    {
                        embed.WithColor(new DiscordColor("#27ae60"));
                        embed.WithDescription("Участник сервера.");
                    }


                    //1 Row - ID, Username
                    embed.AddFieldOrDefault("ID", user.Id.ToString(), true);
                    if (member != null)
                    {
                        embed.AddFieldOrDefault("Имя на сервере", member.Mention, true);
                    }
                    embed.NewInlineRow();

                    //2 Row - Creation and join dates, VoiceTime
                    embed.AddFieldOrDefault("Создан", user.CreationTimestamp.ToString("HH:mm:ss \n dd.MM.yyyy"), true);
                    if (member != null)
                    {
                        embed.AddFieldOrDefault("Присоединился", member.JoinedAt.ToString("HH:mm:ss \n dd.MM.yyyy"), true);
                    }
                    embed.AddFieldOrDefault("Время в каналах", $"{(voiceTime.Days * 24) + voiceTime.Hours}:{voiceTime.Minutes}", true);

                    //3 Row - WebUser info
                    if (webUser != null)
                    {
                        embed.AddFieldOrDefault("Привязка", "Да", true);
                        embed.AddFieldOrEmpty("Страна", GetCountryFlag(webUser.LastIp), true);
                        if (!string.IsNullOrEmpty(webUser.LastXbox))
                        {
                            embed.AddFieldOrDefault("Xbox", webUser.LastXbox.ToString(), true);
                        }
                        else
                        {
                            embed.AddFieldOrDefault("Xbox", "Нет", true);
                        }
                    }
                    embed.NewInlineRow();

                    //4 Row - Donate info
                    embed.AddFieldOrReplace("Донат", GetDonationInfo(user.Id), "Нет", true);
                    embed.AddFieldOrReplace("Подписка", GetSubscriptionInfo(user.Id), "Нет", true);
                    embed.AddFieldOrReplace("Приватный корабль", GetPrivateShip(user.Id), "Нет", true);
                    embed.NewInlineRow();

                    //5 Row - Reports info
                    embed.AddFieldOrDefault("Предупреждения", $":pencil: {warnings}", true);
                    embed.AddFieldOrDefault("Правила", GetCodexInfo(reports, member), true);
                    embed.AddFieldOrDefault("Правила рейда", GetFleetCodexInfo(reports, member), true);
                    embed.AddFieldOrDefault("Мут", $"{GetMutesInfo(reports)}", true);
                    embed.AddFieldOrDefault("Голосовой мут", $"{GetVoiceMutesInfo(reports)}", true);
                    embed.NewInlineRow();

                    //6 Row - Note
                    if (Note.Notes.ContainsKey(user.Id))
                    {
                        embed.AddFieldOrDefault("Заметка", Note.Notes[user.Id].Content);
                    }

                    embed.WithFooter("(*) Не принял после разблокировки");

                    var message = await ctx.RespondAsync(embed : embed.Build());

                    //Реакция на вывод сообщения с предупреждениями
                    if (warnings > 0)
                    {
                        var interactivity = ctx.Client.GetInteractivity();

                        var emoji = DiscordEmoji.FromName(ctx.Client, ":pencil:");

                        await message.CreateReactionAsync(emoji);

                        var em = await interactivity.WaitForReactionAsync(xe => xe.Emoji == emoji, message, ctx.User, TimeSpan.FromSeconds(60));

                        if (!em.TimedOut)
                        {
                            await ctx.TriggerTypingAsync();

                            var command = $"whois wl {user.Id}";

                            var cmds = ctx.CommandsNext;

                            // Ищем команду и извлекаем параметры.
                            var cmd = cmds.FindCommand(command, out var customArgs);

                            // Создаем фейковый контекст команды.
                            var fakeContext = cmds.CreateFakeContext(ctx.Member, ctx.Channel, command, ctx.Prefix, cmd, customArgs);

                            // Выполняем команду за пользователя.
                            await cmds.ExecuteCommandAsync(fakeContext);
                        }
                        else
                        {
                            await message.DeleteAllReactionsAsync();
                        }
                    }
                }
                catch (NotFoundException)
                {
                    await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Пользователь не найден.");
                }
            }
コード例 #6
0
        public async Task Warn(CommandContext ctx, DiscordMember member, [RemainingText] string reason = "Не указана")
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            Warn(ctx.Client, ctx.Member, ctx.Guild, member, reason);
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно выдано предупреждение {member.Mention}! Количество предупреждений: **{WarnSQL.GetForUser(member.Id).Count + 1}**");
        }