public static async Task MessageCreated(DiscordClient client, MessageCreateEventArgs e) { if (e.Guild == null && !e.Author.IsCurrent && !e.Message.Content.StartsWith(Bot.BotSettings.Prefix) && !DmHandled.Contains(e.Author)) { var embed = new DiscordEmbedBuilder() .WithTitle("Помощь по серверу") .WithDescription("Если у вас есть **вопросы по поводу сервера**, \n" + "вы можете создать тикет командой **`!support`**\n\n") .WithColor(new DiscordColor("#27ae60")); embed.AddFieldOrEmpty("Полезные каналы которые вам помогут:", "• <#435486626551037963> \n" + "• <#459657130786422784> \n" + "• <#696668143430533190> \n" + "• <#476430819011985418>, <#435445608082440213> \n" + "• <#744944702415175760>, <#744944784765878324> \n" + "• <#725708512121847849>, <#552407278158872590>"); embed.AddFieldOrEmpty("", "Наиболее актуальную информацию по командам всегда можно получить через `!help`"); await e.Channel.SendMessageAsync(embed : embed); } }
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} Пользователь не найден."); } }
/// <summary> /// Удаление старых тикетов. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private static async void CheckExpiredFleetPoll(object sender, ElapsedEventArgs e) { Client.Logger.LogDebug(BotLoggerEvents.Timers, $"CheckExpiredFleetPoll running"); try { var morningTime = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, 8, 0, 0); if (DateTime.Now > morningTime) { var message = await Client.Guilds[Bot.BotSettings.Guild].GetChannel(Bot.BotSettings.FleetCreationChannel) .GetMessageAsync(Bot.BotSettings.FleetVotingMessage); if (message.Embeds.Count > 0) { var oldEmbed = message.Embeds.FirstOrDefault(); //Проверка времени if (morningTime.Date > oldEmbed.Timestamp.Value.Date) { var embed = new DiscordEmbedBuilder(oldEmbed); if (embed.Fields.Count < 3) { embed.AddFieldOrEmpty("\u200B\nРезультаты:", ""); } embed.Fields[2].Value = "\u200B"; foreach (var reaction in message.Reactions) { if (reaction.Emoji.GetDiscordName() != ":black_small_square:") { embed.Fields[2].Value += $"{reaction.Emoji} - **{reaction.Count - 1}**; "; } } embed.WithTimestamp(DateTime.Now); await message.ModifyAsync(embed : embed.Build()); await message.DeleteAllReactionsAsync(); var emojis = new DiscordEmoji[] { DiscordEmoji.FromName(Client, ":one:"), DiscordEmoji.FromName(Client, ":two:"), DiscordEmoji.FromName(Client, ":three:"), DiscordEmoji.FromName(Client, ":black_small_square:"), DiscordEmoji.FromGuildEmote(Client, Bot.BotSettings.BrigEmoji), DiscordEmoji.FromGuildEmote(Client, Bot.BotSettings.GalleonEmoji) }; foreach (var emoji in emojis) { await Task.Delay(400); await message.CreateReactionAsync(emoji); } Client.Logger.LogInformation(BotLoggerEvents.Timers, $"Успешно обновлено голосование рейдов"); } } } } catch (Exception ex) { Client.Logger.LogError(BotLoggerEvents.Timers, ex, $"Ошибка при обновлении голосования рейдов."); } }