Exemple #1
0
        async Task ReloadChannelAsync(IMessageChannel channel)
        {
            if (channel.Id == _generalConfigChannel.Id)
            {
                var messages = await LoadMessagesAsync(channel);

                var dict = new Dictionary <string, ConfigPart>();

                foreach (var message in messages)
                {
                    if (!message.Content.StartsWith("> "))
                    {
                        continue;
                    }

                    var lines = message.Content.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    var key   = lines[0].Substring(2).Trim().ToLowerInvariant();
                    var value = string.Join("\n", lines.Skip(1).Where(l => !l.StartsWith("```")));

                    if (dict.ContainsKey(key))
                    {
                        if (message.Reactions.Count == 0)
                        {
                            await message.AddReactionAsync(new Emoji("\u0032\u20E3"));
                        }

                        continue;
                    }

                    dict[key] = new ConfigPart(message, value);
                }

                // general
                var general = await LoadConfigPartAsync <GeneralConfig>(channel, "General", dict);

                await _client.SetStatusAsync(general.FallbackStatus);

                StateUpdateCommand = general.StateUpdateCommand;

                // claiming
                var claim = await LoadConfigPartAsync(channel, "Claiming", dict, ClaimConfig.CreateDefault);

                ClaimEnabled     = claim.Enabled;
                ClaimDelay       = TimeSpan.FromSeconds(claim.Delay);
                KakeraClaimDelay = TimeSpan.FromSeconds(claim.KakeraDelay);
                KakeraTargets    = claim.KakeraTargets;

                // rolling
                var roll = await LoadConfigPartAsync <RollConfig>(channel, "Rolling", dict);

                RollEnabled            = roll.Enabled;
                RollCommand            = roll.Command;
                DailyKakeraEnabled     = roll.KakeraEnabled;
                DailyKakeraCommand     = roll.KakeraCommand;
                DailyKakeraStateUpdate = roll.KakeraStateUpdate;
                RollTypingDelay        = TimeSpan.FromSeconds(roll.TypingDelay);
            }

            else if (channel.Id == _wishedCharacterChannel.Id)
            {
                WishedCharacterRegex = CreateWishRegex(await LoadMessagesAsync(channel));
            }

            else if (channel.Id == _wishedAnimeChannel.Id)
            {
                WishedAnimeRegex = CreateWishRegex(await LoadMessagesAsync(channel));
            }

            else if (channel.Id == _botChannelChannel.Id)
            {
                var messages = await LoadMessagesAsync(channel);

                var channelIds = new HashSet <ulong>();

                foreach (var message in messages)
                {
                    var parts = message.Content.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    ITextChannel chan;

                    if (!ulong.TryParse(parts[0], out var id) &&
                        !ulong.TryParse(_channelMentionRegex.Match(parts[0]).Groups["id"].Value, out id) ||
                        (chan = _client.GetChannel(id) as ITextChannel) == null)
                    {
                        if (message.Reactions.Count == 0)
                        {
                            await message.AddReactionAsync(new Emoji("\u274C"));
                        }

                        continue;
                    }

                    if (!channelIds.Add(id))
                    {
                        if (message.Reactions.Count == 0)
                        {
                            await message.AddReactionAsync(new Emoji("\u0032\u20E3"));
                        }

                        continue;
                    }

                    if (message.Reactions.Count != 0)
                    {
                        await message.RemoveAllReactionsAsync();
                    }

                    if (parts.Length == 1)
                    {
                        await message.ModifyAsync(m => m.Content = $"<#{chan.Id}> - **{chan.Guild.Name}**");
                    }
                }

                BotChannelIds = channelIds;
            }
            else
            {
                return;
            }

            Log.Debug($"Configuration channel '${channel.Name}' reloaded.");
        }
Exemple #2
0
        async Task ReloadChannelAsync(IMessageChannel channel)
        {
            var measure = new MeasureContext();

            if (channel.Id == _generalConfigChannel.Id)
            {
                var messages = await LoadMessagesAsync(channel);

                var dict = new Dictionary <string, ConfigPart>();

                foreach (var message in messages)
                {
                    if (!message.Content.StartsWith("> "))
                    {
                        continue;
                    }

                    var lines = message.Content.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
                    var key   = lines[0].Substring(2).Trim().ToLowerInvariant();
                    var value = string.Join("\n", lines.Skip(1).Where(l => !l.StartsWith("```")));

                    if (dict.ContainsKey(key))
                    {
                        if (message.Reactions.Count == 0)
                        {
                            await message.AddReactionAsync(new Emoji("\u0032\u20E3"));
                        }

                        continue;
                    }

                    dict[key] = new ConfigPart(message, value);
                }

                // general
                var general = await LoadConfigPartAsync <GeneralConfig>(channel, "General", dict);

                await _client.SetStatusAsync(general.FallbackStatus);

                StateUpdateCommand = general.StateUpdateCommand;

                // claiming
                var claim = await LoadConfigPartAsync(channel, "Claiming", dict, ClaimConfig.CreateDefault);

                ClaimEnabled      = claim.Enabled;
                ClaimDelay        = TimeSpan.FromSeconds(claim.Delay);
                KakeraThreshold   = claim.KakeraThreshold;
                KakeraClaimDelay  = TimeSpan.FromSeconds(claim.KakeraDelay);
                KakeraTargets     = claim.KakeraTargets;
                ClaimCustomEmotes = claim.CustomEmotes;

                // rolling
                var roll = await LoadConfigPartAsync <RollConfig>(channel, "Rolling", dict);

                RollEnabled            = roll.Enabled;
                RollCommand            = roll.Command;
                DailyKakeraEnabled     = roll.KakeraEnabled;
                DailyKakeraCommand     = roll.KakeraCommand;
                DailyKakeraStateUpdate = roll.KakeraStateUpdate;
                RollTypingDelay        = TimeSpan.FromSeconds(roll.TypingDelay);
                RollIntervalOverride   = roll.IntervalOverrideMinutes == null ? null as TimeSpan? : TimeSpan.FromMinutes(roll.IntervalOverrideMinutes.Value);

                // miscellaneous
                var miscellaneous = await LoadConfigPartAsync <MiscellaneousConfig>(channel, "Miscellaneous", dict);

                AutoUpdate = miscellaneous.AutoUpdate;
            }

            else if (channel.Id == _wishedCharacterChannel.Id)
            {
                WishedCharacterRegex = CreateWishlistRegex(await LoadMessagesAsync(channel));
            }

            else if (channel.Id == _wishedAnimeChannel.Id)
            {
                WishedAnimeRegex = CreateWishlistRegex(await LoadMessagesAsync(channel));
            }

            else if (channel.Id == _botChannelChannel.Id)
            {
                var messages = await LoadMessagesAsync(channel);

                var channelIds = new HashSet <ulong>();

                foreach (var message in messages)
                {
                    var id = message.GetChannelIds().SingleOrDefault();

                    if (ulong.TryParse(message.Content, out var x))
                    {
                        id = x;
                    }

                    ITextChannel chan;

                    if ((chan = _client.GetChannel(id) as ITextChannel) == null || !channelIds.Add(id))
                    {
                        if (message.Reactions.Count == 0)
                        {
                            await message.AddReactionAsync(new Emoji("\u274C"));
                        }

                        continue;
                    }

                    if (message.Reactions.Count != 0)
                    {
                        await message.RemoveAllReactionsAsync();
                    }

                    if (!message.Content.StartsWith("<#"))
                    {
                        await message.ModifyAsync(m => m.Content = $"<#{chan.Id}> - **{chan.Guild.Name}**");
                    }
                }

                BotChannelIds = channelIds;
            }

            else if (channel.Id == _claimReplyChannel.Id)
            {
                ClaimReplies = (await LoadMessagesAsync(channel)).Select(m => m.Content).ToList();
            }

            else if (channel.Id == _wishlistUsersChannel.Id)
            {
                var messages = await LoadMessagesAsync(channel);

                var userIds = new HashSet <ulong>();

                foreach (var message in messages)
                {
                    var id = message.GetUserIds().SingleOrDefault();

                    if (ulong.TryParse(message.Content, out var x))
                    {
                        id = x;
                    }

                    IUser user;

                    if ((user = _client.GetUser(id)) == null || !userIds.Add(id))
                    {
                        if (message.Reactions.Count == 0)
                        {
                            await message.AddReactionAsync(new Emoji("\u274C"));
                        }

                        continue;
                    }

                    if (message.Reactions.Count != 0)
                    {
                        await message.RemoveAllReactionsAsync();
                    }

                    if (!message.Content.StartsWith("<@"))
                    {
                        await message.ModifyAsync(m => m.Content = $"<@{user.Id}> - **{user.Username}#{user.Discriminator}**");
                    }
                }

                ClaimWishlistUserIds = userIds;
            }

            else
            {
                return;
            }

            Log.Debug($"Configuration channel '#{channel.Name}' reloaded in {measure}.");
        }