public static async Task ClientOnReady(DiscordClient client, ReadyEventArgs e) { client.Logger.LogInformation(BotLoggerEvents.Bot, "SoT", $"Sea Of Thieves Bot, version {Bot.BotSettings.Version}"); client.Logger.LogInformation(BotLoggerEvents.Bot, "Made by Actis and VanguardFx"); // и еще немного ЧСВ var guild = client.Guilds[Bot.BotSettings.Guild]; var member = await guild.GetMemberAsync(client.CurrentUser.Id); await member.ModifyAsync(x => x.Nickname = $"SeaOfThieves {Bot.BotSettings.Version}"); Bot.ShipNamesStats = FastShipStats.LoadFromFile("generated/stats/ship_names.csv"); }
public static async Task CreateOnVoiceStateUpdated(DiscordClient client, VoiceStateUpdateEventArgs e) { try { if (e.Channel != null) { if (e.Channel.Id == Bot.BotSettings.AutocreateGalleon || e.Channel.Id == Bot.BotSettings.AutocreateBrigantine || e.Channel.Id == Bot.BotSettings.AutocreateSloop ) // мы создаем канал, если пользователь зашел в один из каналов автосоздания { if (ShipCooldowns.ContainsKey(e.User)) // проверка на кулдаун { if ((ShipCooldowns[e.User] - DateTime.Now).Seconds > 0) { var m = await e.Guild.GetMemberAsync(e.User.Id); await m.PlaceInAsync(e.Guild.GetChannel(Bot.BotSettings.WaitingRoom)); await m.SendMessageAsync($"{Bot.BotSettings.ErrorEmoji} Вам нужно подождать " + $"**{(ShipCooldowns[e.User] - DateTime.Now).Seconds}** секунд прежде чем " + "создавать новый корабль!"); client.Logger.LogInformation(BotLoggerEvents.Event, $"Участник {e.User.Username}#{e.User.Discriminator} ({e.User.Discriminator}) был перемещён в комнату ожидания."); return; } } // если проверка успешно пройдена, добавим пользователя // в словарь кулдаунов ShipCooldowns[e.User] = DateTime.Now.AddSeconds(Bot.BotSettings.FastCooldown); //Проверка на эмиссарство var channelSymbol = Bot.BotSettings.AutocreateSymbol; var member = await e.Guild.GetMemberAsync(e.User.Id); member.Roles.ToList().ForEach(x => { if (x.Id == Bot.BotSettings.EmissaryGoldhoadersRole) { channelSymbol = DiscordEmoji.FromName(client, ":moneybag:"); } else if (x.Id == Bot.BotSettings.EmissaryTradingCompanyRole) { channelSymbol = DiscordEmoji.FromName(client, ":pig:"); } else if (x.Id == Bot.BotSettings.EmissaryOrderOfSoulsRole) { channelSymbol = DiscordEmoji.FromName(client, ":skull:"); } else if (x.Id == Bot.BotSettings.EmissaryAthenaRole) { channelSymbol = DiscordEmoji.FromName(client, ":gem:"); } else if (x.Id == Bot.BotSettings.EmissaryReaperBonesRole) { channelSymbol = DiscordEmoji.FromName(client, ":skull_crossbones:"); } else if (x.Id == Bot.BotSettings.HuntersRole) { channelSymbol = DiscordEmoji.FromName(client, ":fish:"); } }); var autoCreateSloopCategory = e.Guild.GetChannel(Bot.BotSettings.AutocreateSloopCategory); var autoCreateBrigantineCategory = e.Guild.GetChannel(Bot.BotSettings.AutocreateBrigantineCategory); var autoCreateGalleongCategory = e.Guild.GetChannel(Bot.BotSettings.AutocreateGalleonCategory); //Генерируем создание канала var used_names = autoCreateSloopCategory.Children.Select(x => x.Name).ToArray(); used_names.Concat(autoCreateBrigantineCategory.Children.Select(x => x.Name).ToArray()); used_names.Concat(autoCreateGalleongCategory.Children.Select(x => x.Name).ToArray()); var generatedName = ShipNames.GenerateChannelName(used_names); var channelName = $"{channelSymbol} {generatedName}"; DiscordChannel created = null; if (!Bot.ShipNamesStats.ContainsKey(generatedName)) // create a key-value pair for a new ship name { Bot.ShipNamesStats[generatedName] = new[] { 0, 0, 0 } } ; if (e.Channel.Id == Bot.BotSettings.AutocreateSloop) { Bot.ShipNamesStats[generatedName][0]++; created = await e.Guild.CreateVoiceChannelAsync( channelName, autoCreateSloopCategory, bitrate : Bot.BotSettings.Bitrate, user_limit : 2); } else if (e.Channel.Id == Bot.BotSettings.AutocreateBrigantine) { Bot.ShipNamesStats[generatedName][1]++; created = await e.Guild.CreateVoiceChannelAsync( channelName, autoCreateBrigantineCategory, bitrate : Bot.BotSettings.Bitrate, user_limit : 3); } else { Bot.ShipNamesStats[generatedName][2]++; created = await e.Guild.CreateVoiceChannelAsync( channelName, autoCreateGalleongCategory, bitrate : Bot.BotSettings.Bitrate, user_limit : 4); } FastShipStats.WriteToFile(Bot.ShipNamesStats, "generated/stats/ship_names.csv"); await member.PlaceInAsync(created); client.Logger.LogInformation(BotLoggerEvents.Event, $"Участник {e.User.Username}#{e.User.Discriminator} ({e.User.Id}) создал канал через автосоздание." + $" Каналов в категории: {created.Parent.Children.Count()}"); } } } catch (NullReferenceException) // исключение выбрасывается если пользователь покинул канал { // нам здесь ничего не надо делать, просто пропускаем } }