Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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) // исключение выбрасывается если пользователь покинул канал
            {
                // нам здесь ничего не надо делать, просто пропускаем
            }
        }