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 } }
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); } }
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}**"); }
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 } }
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} Пользователь не найден."); } }
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}**"); }