Esempio n. 1
0
        public async Task Disable([Name("카테고리")] string category)
        {
            if (!CategoryNames.Contains(category))
            {
                await Context.MsgReplyEmbedAsync($"알 수 없는 카테고리에요\n{string.Join(", ", CategoryNames.Select(c => $"`{c}`"))} 중 하나를 선택할 수 있어요");

                return;
            }

            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;
            CategoryType            cat     = StringToCategory(category);

            if (cat == CategoryType.Setting)
            {
                await Context.MsgReplyEmbedAsync($"비활성화 할 수 없는 카테고리에요");

                return;
            }

            if (!setting.EnabledCategories.Contains(cat))
            {
                await Context.MsgReplyEmbedAsync($"이미 비활성화돼있는 카테고리에요");

                return;
            }

            setting.EnabledCategories.Remove(cat);
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"{category} 카테고리를 비활성화했어요");
        }
Esempio n. 2
0
        public async Task SetLevelUpChannel([Remainder, Name("채널")] SocketTextChannel channel)
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            setting.LevelUpChannelId = channel.Id;
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"이제 레벨업 메시지가 {channel.Mention} 채널에 보내져요");
        }
Esempio n. 3
0
        public async Task SetLogChannel([Remainder, Name("채널")] SocketTextChannel channel)
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            setting.LogChannelId = channel.Id;

            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"로그 채널을 {channel.Name.으로()} 설정했어요");
        }
Esempio n. 4
0
        public async Task SeeLevelUpChannel()
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            EmbedBuilder emb = Context.CreateEmbed(title: "레벨 설정");

            if (setting.LevelUpChannelId.HasValue && Context.Guild.Channels.Any(c => c.Id == setting.LevelUpChannelId.Value))
            {
                emb.AddField("레벨업 채널", Context.Guild.GetTextChannel(setting.LevelUpChannelId.Value).Mention);
            }
            else
            {
                emb.AddField("레벨업 채널", "레벨업 채널이 설정되지 않았어요");
            }

            List <ulong> cnl = setting.NonXpChannels.Where(c => Context.Guild.Channels.Any(cc => cc.Id == c)).ToList();

            if (setting.NonXpChannels.Count > 0)
            {
                string s = "";

                foreach (var value in cnl)
                {
                    s += $"{Context.Guild.GetTextChannel(value).Mention}\n";
                }

                emb.AddField("레벨업 불가 채널", s);
            }
            else
            {
                emb.AddField("레벨업 불가 채널", "설정된 레벨업 불가 채널이 없어요");
            }

            var roles = setting.LevelRoles.Where(lr => Context.Guild.Roles.Any(r => r.Id == lr.Value)).ToList();

            if (roles.Count > 0)
            {
                string s = "";

                foreach (var value in roles)
                {
                    s += $"{value.Key} 레벨: {Context.Guild.GetRole(value.Value).Mention}\n";
                }

                emb.AddField("레벨 역할", s);
            }
            else
            {
                emb.AddField("레벨 역할", "설정된 레벨 역할이 없어요");
            }

            await Context.MsgReplyEmbedAsync(emb.Build());
        }
Esempio n. 5
0
        public async Task SeeEnabledCategories()
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            EmbedBuilder emb = Context.CreateEmbed(title: "카테고리 활성화 확인");

            foreach (CategoryType cat in Enum.GetValues(typeof(CategoryType)))
            {
                emb.AddField(CategoryToString(cat), setting.EnabledCategories.Contains(cat).ToEmoji(), true);
            }

            await Context.MsgReplyEmbedAsync(emb.Build());
        }
Esempio n. 6
0
        private static async Task OnMessageDeleted(Cacheable <IMessage, ulong> cache, ISocketMessageChannel channel)
        {
            if (channel.GetType() != typeof(SocketTextChannel))
            {
                return;
            }

            SocketGuild guild = ((SocketTextChannel)channel).Guild;

            OliveGuild.GuildSetting setting = OliveGuild.Get(guild.Id).Setting;
            if (!setting.EnabledCategories.Contains(RequireCategoryEnable.CategoryType.Log) || !setting.LogChannelId.HasValue)
            {
                return;
            }
            SocketTextChannel c = guild.GetTextChannel(setting.LogChannelId.Value);

            EmbedBuilder emb = new EmbedBuilder
            {
                Title       = "메시지 삭제",
                Color       = new Color(255, 0, 0),
                Description = $"<#{channel.Id}> 채널에서 메시지({cache.Id})가 삭제됐어요\n",
                Timestamp   = DateTimeOffset.Now.ToKST()
            };

            if (cache.HasValue)
            {
                emb.WithAuthor($"{cache.Value.Author.Username}#{cache.Value.Author.Discriminator} ({cache.Value.Author.Id})", cache.Value.Author.GetAvatar());

                if (string.IsNullOrWhiteSpace(cache.Value.Content))
                {
                    emb.Description += "\n내용이 비어있어요";
                }
                else
                {
                    emb.AddField("내용", cache.Value.Content.Slice(512, out bool isApplied), true);
                    if (isApplied)
                    {
                        await c.SendFileAsync(cache.Value.Content.ToStream(), "before.txt", "");
                    }
                }
            }
            else
            {
                emb.WithAuthor("알 수 없음");

                emb.Description += "\n내용이 캐시에 저장되지 않았어요";
            }

            await c.SendMessageAsync(embed : emb.Build());
        }
Esempio n. 7
0
        public async Task AddLevelRole([Name("레벨")] int level, [Remainder, Name("역할")] SocketRole role)
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            if (setting.LevelRoles.ContainsKey(level.ToString()))
            {
                await Context.MsgReplyEmbedAsync("해당 레벨의 역할이 이미 설정돼있어요");

                return;
            }

            setting.LevelRoles.Add(level.ToString(), role.Id);
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"이제 {level} 레벨이 되면 {role.Mention} 역할을 얻을 수 있어요");
        }
Esempio n. 8
0
        public async Task RemoveNonXpChannel([Name("채널")] SocketTextChannel channel)
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            if (!setting.NonXpChannels.Contains(channel.Id))
            {
                await Context.MsgReplyEmbedAsync("해당 채널은 레벨업 불가 채널이 아니에요");

                return;
            }

            setting.NonXpChannels.Remove(channel.Id);
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"이제 {channel.Mention}에서 메시지를 보내면 xp가 올라요");
        }
Esempio n. 9
0
        public async Task AddNonXpChannel([Name("채널")] SocketTextChannel channel)
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            if (setting.NonXpChannels.Contains(channel.Id))
            {
                await Context.MsgReplyEmbedAsync("해당 채널은 이미 레벨업 불가 채널이에요");

                return;
            }

            setting.NonXpChannels.Add(channel.Id);
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"이제 {channel.Mention} 채널에서는 xp가 오르지 않아요");
        }
Esempio n. 10
0
        public async Task ResetLevelUpChannel()
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            if (!setting.LevelUpChannelId.HasValue)
            {
                await Context.MsgReplyEmbedAsync("레벨업 채널이 설정되지 않아서 초기화 할 수 없어요");

                return;
            }

            setting.LevelUpChannelId = null;
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"레벨업 채널을 초기화했어요");
        }
Esempio n. 11
0
        public async Task RemoveLevelRole([Name("레벨")] int level)
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            if (!setting.LevelRoles.ContainsKey(level.ToString()))
            {
                await Context.MsgReplyEmbedAsync("해당 레벨에 설정된 역할이 없어요");

                return;
            }

            setting.LevelRoles.Remove(level.ToString());
            OliveGuild.Set(Context.Guild.Id, g => g.Setting, setting);

            await Context.MsgReplyEmbedAsync($"{level} 레벨의 역할을 제거했어요");
        }
Esempio n. 12
0
        public async Task SeeLogChannel()
        {
            OliveGuild.GuildSetting setting = OliveGuild.Get(Context.Guild.Id).Setting;

            EmbedBuilder emb = Context.CreateEmbed(title: "로그 채널");

            ulong?id = setting.LogChannelId;

            if (!id.HasValue || !Context.Guild.Channels.Any(c => c.Id == id))
            {
                emb.Description = "로그 채널이 설정되지 않았어요";
            }
            else
            {
                emb.Description = $"현재 로그 채널은 {Context.Guild.GetTextChannel(id.Value).Name.이()}에요";
            }

            await Context.MsgReplyEmbedAsync(emb.Build());
        }
Esempio n. 13
0
        public static async Task OnMessageUpdated(Cacheable <IMessage, ulong> cache, SocketMessage msg, ISocketMessageChannel channel)
        {
            if (channel.GetType() != typeof(SocketTextChannel))
            {
                return;
            }

            SocketGuild guild = ((SocketTextChannel)channel).Guild;

            OliveGuild.GuildSetting setting = OliveGuild.Get(guild.Id).Setting;
            if (!setting.EnabledCategories.Contains(RequireCategoryEnable.CategoryType.Log) || !setting.LogChannelId.HasValue)
            {
                return;
            }
            SocketTextChannel c = guild.GetTextChannel(setting.LogChannelId.Value);

            EmbedBuilder emb = new EmbedBuilder
            {
                Title       = "메시지 수정",
                Color       = new Color(255, 255, 0),
                Description = $"<#{channel.Id}> 채널에서 [메시지]({msg.GetJumpUrl()})가 수정됐어요\n",
                Timestamp   = DateTimeOffset.Now.ToKST()
            };

            emb.WithAuthor(msg.Author);

            if (cache.HasValue)
            {
                if (cache.Value.Content == msg.Content)
                {
                    return;
                }

                if (string.IsNullOrWhiteSpace(cache.Value.Content))
                {
                    emb.Description += "\n수정 전 내용이 비어있어요";
                }
                else
                {
                    emb.AddField("수정 전 내용", cache.Value.Content.Slice(512, out bool isApplied), true);
                    if (isApplied)
                    {
                        await c.SendFileAsync(msg.Content.ToStream(), "before.txt", "");
                    }
                }
            }
            else
            {
                emb.Description += "\n수정 전 내용은 캐시에 저장되지 않았어요";
            }

            if (string.IsNullOrWhiteSpace(msg.Content))
            {
                emb.Description += "\n수정 후 내용이 비어있어요";
            }
            else
            {
                emb.AddField("수정 후 내용", msg.Content.Slice(512, out bool isApplied), true);
                if (isApplied)
                {
                    await c.SendFileAsync(msg.Content.ToStream(), "after.txt", "");
                }
            }

            await c.SendMessageAsync(embed : emb.Build());
        }