public async Task InviteDelete(CommandContext ctx) { //Удаляем сообщение с командой try { await ctx.Message.DeleteAsync(); } catch (NotFoundException) { } try { //Проверка если пользователь в канале if (ctx.Member.VoiceState == null || ctx.Member.VoiceState.Channel.Id == Bot.BotSettings.WaitingRoom) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы должны быть в голосовом канале!"); return; } } catch (NullReferenceException) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы должны быть в голосовом канале!"); return; } var channel = ctx.Member.VoiceState?.Channel; if (VoiceListener.FindChannelInvites.ContainsKey(channel.Id)) { try { var embedMessage = await ctx.Guild.GetChannel(Bot.BotSettings.FindChannel).GetMessageAsync(VoiceListener.FindChannelInvites[channel.Id]); ctx.Client.Logger.LogDebug(BotLoggerEvents.Commands, $"Удаление ембеда в поиске игроков!"); await embedMessage.DeleteAsync(); } catch (NotFoundException) { } VoiceListener.FindChannelInvites.Remove(channel.Id); await VoiceListener.SaveFindChannelMessagesAsync(); } }
public async Task Invite(CommandContext ctx, [Description("Описание (На афину, на форт и т.д.)"), RemainingText] string description) { //Проверка на использование канала с поиском игроков if (ctx.Channel.Id != Bot.BotSettings.FindChannel) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Команда может использоваться только в канале поиска игроков!"); return; } //Удаляем сообщение с командой try { await ctx.Message.DeleteAsync(); } catch { } try { //Проверка если пользователь в канале if (ctx.Member.VoiceState == null || ctx.Member.VoiceState.Channel.Id == Bot.BotSettings.WaitingRoom) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы должны быть в голосовом канале!"); return; } } catch (NullReferenceException) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы должны быть в голосовом канале!"); return; } //Проверка на условия голосового канала var channel = ctx.Member.VoiceState?.Channel; if (channel.Users.Count() >= channel.UserLimit) { await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Ваш канал уже заполнен!"); return; } await ctx.TriggerTypingAsync(); var invite = await channel.CreateInviteAsync(); var usersNeeded = channel.UserLimit - channel.Users.Count(); string embedThumbnail; //Если канал в категории рейда, вставляем картинку с рейдом и проверяем если это обычный канал рейда (в нём 1 лишний слот, его мы игнорируем) if (channel.Parent.Name.StartsWith("Рейд")) { if (channel.Name.StartsWith("Рейд")) { usersNeeded = Math.Max(0, (usersNeeded - 1)); } embedThumbnail = usersNeeded switch { 0 => Bot.BotSettings.ThumbnailFull, _ => Bot.BotSettings.ThumbnailRaid }; } //Если это не канал рейда, вставляем подходящую картинку по слотам, или NA если число другое else { embedThumbnail = usersNeeded switch { 0 => Bot.BotSettings.ThumbnailFull, 1 => Bot.BotSettings.ThumbnailOne, 2 => Bot.BotSettings.ThumbnailTwo, 3 => Bot.BotSettings.ThumbnailThree, _ => Bot.BotSettings.ThumbnailNA }; } //Собираем данные для эмбеда var content = ""; content += ($"{DiscordEmoji.FromName(ctx.Client, ":loudspeaker:")} {description}\n\n"); var slotsCount = 1; foreach (var member in channel.Users) { if (content.Length > 1900 || slotsCount > 15) { content += $"{DiscordEmoji.FromName(ctx.Client, ":arrow_heading_down:")} и еще {channel.Users.Count() - slotsCount + 1}.\n"; break; } else { content += $"{DiscordEmoji.FromName(ctx.Client, ":doubloon:")} {member.Mention}\n"; slotsCount++; } } for (int i = 0; i < usersNeeded; i++) { if (content.Length > 1900 || slotsCount > 15) { if (i != 0) //Без этого сообщение будет отправлено вместе с тем что выше { content += $"{DiscordEmoji.FromName(ctx.Client, ":arrow_heading_down:")} и еще {channel.UserLimit - slotsCount + 1} свободно.\n"; } break; } else { content += $"{DiscordEmoji.FromName(ctx.Client, ":gold:")} ☐\n"; slotsCount++; } } content += $"\n**Подключиться:** {invite}"; //Embed var embed = new DiscordEmbedBuilder { Description = content, Color = new DiscordColor("#e67e22") }; embed.WithAuthor($"{channel.Name}", url: invite.ToString(), iconUrl: ctx.Member.AvatarUrl); embed.WithThumbnail(embedThumbnail); embed.WithTimestamp(DateTime.Now); embed.WithFooter($"В поиске команды. +{usersNeeded}"); //Проверка если сообщение было уже отправлено if (!VoiceListener.FindChannelInvites.ContainsKey(channel.Id)) { var msg = await ctx.RespondAsync(embed : embed.Build()); //Добавялем в словарь связку канал - сообщение и сохраняем в файл VoiceListener.FindChannelInvites[channel.Id] = msg.Id; await VoiceListener.SaveFindChannelMessagesAsync(); } else { var embedMessage = await ctx.Channel.GetMessageAsync(VoiceListener.FindChannelInvites[channel.Id]); await embedMessage.ModifyAsync(embed : embed.Build()); } }