示例#1
0
        private static void ProcessMessage(object sender, MessageEventArgs e)
        {
            if (e.Shard.User.Id == e.Message.Author.Id)
            {
                return;
            }

            ITextChannel            Channel          = (ITextChannel)e.Shard.Cache.Channels.Get(e.Message.ChannelId);
            DiscordMessage          message          = e.Message;
            DiscoreCache            cache            = e.Shard.Cache;
            DiscordGuildTextChannel guildTextChannel = cache.Channels.Get(message.ChannelId) as DiscordGuildTextChannel;
            DiscoreGuildCache       guildCache       = cache.Guilds.Get(guildTextChannel.GuildId);
            DiscordGuildMember      member           = guildCache.Members.Get(e.Message.Author.Id).Value;

            if (Channel.Id == Snowflake.Parse(Settings.Sunbae.ChannelID))
            {
                String[] bannedRoles = new String[] { "Encoders", "Uploaders", "Sunbae", "admins" };

                foreach (DiscordRole role in guildCache.Roles.Values)
                {
                    if (bannedRoles.Contains(role.Name))
                    {
                        continue;
                    }

                    if (role.Name.ToLower() == e.Message.Content.ToLower())
                    {
                        member.AddRole(role.Id);
                        break;
                    }
                }
                e.Message.Delete();
            }
        }
示例#2
0
    public async Task Role_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866459254693429258")
            );

        // Assert
        message.Text().Should().Contain("Role mention: @Role 1");
    }
示例#3
0
    public async Task Text_channel_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866459040480624680")
            );

        // Assert
        message.Text().Should().Contain("Text channel mention: #mention-tests");
    }
示例#4
0
    public async Task Role_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866459254693429258")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Role mention: @Role 1");
    }
示例#5
0
    public async Task Voice_channel_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866459175462633503")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Voice channel mention: #chaos-vc [voice]");
    }
示例#6
0
    public async Task Text_channel_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866459040480624680")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Text channel mention: #mention-tests");
    }
示例#7
0
    public async Task Voice_channel_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866459175462633503")
            );

        // Assert
        message.Text().Should().Contain("Voice channel mention: 🔊chaos-vc");
    }
    public async Task Reply_to_a_normal_message_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.ReplyTestCases,
            Snowflake.Parse("866460738239725598")
            );

        // Assert
        message.Text().Should().Contain("reply to original");
        message.QuerySelector(".chatlog__reference-link")?.Text().Should().Contain("original");
    }
示例#9
0
    public async Task User_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866458840245076028")
            );

        // Assert
        message.Text().Should().Contain("User mention: @Tyrrrz");
        message.InnerHtml.Should().Contain("Tyrrrz#5447");
    }
示例#10
0
    public async Task Message_with_a_PNG_based_sticker_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.StickerTestCases,
            Snowflake.Parse("939670623158943754")
            );

        // Assert
        var stickerUrl = message.QuerySelector("[title='rock'] img")?.GetAttribute("src");

        stickerUrl.Should().Be("https://discord.com/stickers/904215665597120572.png");
    }
示例#11
0
    public async Task Message_with_a_Lottie_based_sticker_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.StickerTestCases,
            Snowflake.Parse("939670526517997590")
            );

        // Assert
        var stickerUrl = message.QuerySelector("[title='Yikes'] [data-source]")?.GetAttribute("data-source");

        stickerUrl.Should().Be("https://discord.com/stickers/816087132447178774.json");
    }
    public async Task Reply_to_an_empty_message_with_attachment_is_rendered_correctly()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/634

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.ReplyTestCases,
            Snowflake.Parse("866462470335627294")
            );

        // Assert
        message.Text().Should().Contain("reply to attachment");
        message.QuerySelector(".chatlog__reference-link")?.Text().Should().Contain("Click to see attachment");
    }
示例#13
0
    public async Task Message_containing_a_YouTube_video_link_is_rendered_with_a_video_embed()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/570

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.EmbedTestCases,
            Snowflake.Parse("866472508588294165")
            );

        // Assert
        var iframeUrl = message.QuerySelector("iframe")?.GetAttribute("src");

        iframeUrl.Should().Be("https://www.youtube.com/embed/qOWW4OlgbvE");
    }
示例#14
0
    public async Task Message_containing_a_Spotify_track_link_is_rendered_with_a_track_embed()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/657

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.EmbedTestCases,
            Snowflake.Parse("867886632203976775")
            );

        // Assert
        var iframeUrl = message.QuerySelector("iframe")?.GetAttribute("src");

        iframeUrl.Should().Be("https://open.spotify.com/embed/track/1LHZMWefF9502NPfArRfvP");
    }
示例#15
0
    public async Task Message_containing_an_image_link_and_nothing_else_is_rendered_without_text_content()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/682

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.EmbedTestCases,
            Snowflake.Parse("991768701126852638")
            );

        // Assert
        var content = message.QuerySelector(".chatlog__content")?.Text();

        content.Should().BeNullOrEmpty();
    }
    public async Task Reply_to_a_deleted_message_is_rendered_correctly()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/645

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.ReplyTestCases,
            Snowflake.Parse("866460975388819486")
            );

        // Assert
        message.Text().Should().Contain("reply to deleted");
        message.QuerySelector(".chatlog__reference-link")?.Text().Should().Contain(
            "Original message was deleted or could not be loaded."
            );
    }
示例#17
0
    public async Task Message_with_an_embed_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.EmbedTestCases,
            Snowflake.Parse("866769910729146400")
            );

        // Assert
        var embed = message.GetProperty("embeds").EnumerateArray().Single();

        embed.GetProperty("title").GetString().Should().Be("Embed title");
        embed.GetProperty("url").GetString().Should().Be("https://example.com");
        embed.GetProperty("timestamp").GetString().Should().Be("2021-07-14T21:00:00+00:00");
        embed.GetProperty("description").GetString().Should().Be("**Embed** _description_");
        embed.GetProperty("color").GetString().Should().Be("#58B9FF");

        var embedAuthor = embed.GetProperty("author");

        embedAuthor.GetProperty("name").GetString().Should().Be("Embed author");
        embedAuthor.GetProperty("url").GetString().Should().Be("https://example.com/author");
        embedAuthor.GetProperty("iconUrl").GetString().Should().NotBeNullOrWhiteSpace();

        var embedThumbnail = embed.GetProperty("thumbnail");

        embedThumbnail.GetProperty("url").GetString().Should().NotBeNullOrWhiteSpace();
        embedThumbnail.GetProperty("width").GetInt32().Should().Be(120);
        embedThumbnail.GetProperty("height").GetInt32().Should().Be(120);

        var embedFooter = embed.GetProperty("footer");

        embedFooter.GetProperty("text").GetString().Should().Be("Embed footer");
        embedFooter.GetProperty("iconUrl").GetString().Should().NotBeNullOrWhiteSpace();

        var embedFields = embed.GetProperty("fields").EnumerateArray().ToArray();

        embedFields.Should().HaveCount(3);
        embedFields[0].GetProperty("name").GetString().Should().Be("Field 1");
        embedFields[0].GetProperty("value").GetString().Should().Be("Value 1");
        embedFields[0].GetProperty("isInline").GetBoolean().Should().BeTrue();
        embedFields[1].GetProperty("name").GetString().Should().Be("Field 2");
        embedFields[1].GetProperty("value").GetString().Should().Be("Value 2");
        embedFields[1].GetProperty("isInline").GetBoolean().Should().BeTrue();
        embedFields[2].GetProperty("name").GetString().Should().Be("Field 3");
        embedFields[2].GetProperty("value").GetString().Should().Be("Value 3");
        embedFields[2].GetProperty("isInline").GetBoolean().Should().BeTrue();
    }
        public async Task <DiscordCommandResult> SetEntrantChannelIdAsync(
            [Description("The channel you wish to announce entrants in.\nSupply nothing to view the current value.")]
            ITextChannel channel = null)
        {
            var channelId = await Database.Config.FindAsync("NEW_ENTRANT_CHANNEL_ID");

            if (channel is null)
            {
                channel = Context.Guild.GetChannel(Snowflake.Parse(channelId.Value)) as ITextChannel;
                return(Response($"New entrants to the current tournament are currently announced in {channel!.Mention}."));
            }

            channelId.Value = channel.Id.ToString();
            await Database.SaveChangesAsync();

            return(Response($"New entrants to the current tournament will now be announced in {channel.Mention}."));
        }
示例#19
0
    public async Task Message_containing_an_image_link_is_rendered_with_an_image_embed()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/537

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.EmbedTestCases,
            Snowflake.Parse("991768701126852638")
            );

        // Assert
        message
        .QuerySelectorAll("img")
        .Select(e => e.GetAttribute("src"))
        .Should()
        .Contain("https://i.redd.it/f8w05ja8s4e61.png");
    }
示例#20
0
    public async Task User_mention_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.MentionTestCases,
            Snowflake.Parse("866458840245076028")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("User mention: @Tyrrrz");

        message
        .GetProperty("mentions")
        .EnumerateArray()
        .Select(j => j.GetProperty("id").GetString())
        .Should()
        .Contain("128178626683338752");
    }
示例#21
0
    public async Task Message_with_an_embed_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.EmbedTestCases,
            Snowflake.Parse("866769910729146400")
            );

        // Assert
        message.Text().Should().ContainAll(
            "Embed author",
            "Embed title",
            "Embed description",
            "Field 1", "Value 1",
            "Field 2", "Value 2",
            "Field 3", "Value 3",
            "Embed footer"
            );
    }
    public async Task Message_with_a_PNG_based_sticker_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.StickerTestCases,
            Snowflake.Parse("939670623158943754")
            );

        // Assert
        var sticker = message
                      .GetProperty("stickers")
                      .EnumerateArray()
                      .Single();

        sticker.GetProperty("id").GetString().Should().Be("904215665597120572");
        sticker.GetProperty("name").GetString().Should().Be("rock");
        sticker.GetProperty("format").GetString().Should().Be("PngAnimated");
        sticker.GetProperty("sourceUrl").GetString().Should().Be("https://discord.com/stickers/904215665597120572.png");
    }
示例#23
0
    public async Task Message_with_an_audio_attachment_is_rendered_correctly()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/333

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885656175620808734")
            );

        // Assert
        message.Text().Should().Contain("Audio attachment");

        var audioUrl = message.QuerySelector("audio source")?.GetAttribute("src");

        audioUrl.Should().Be(
            "https://cdn.discordapp.com/attachments/885587741654536192/885656175348187146/file_example_MP3_1MG.mp3"
            );
    }
示例#24
0
    public async Task Message_with_a_video_attachment_is_rendered_correctly()
    {
        // https://github.com/Tyrrrz/DiscordChatExporter/issues/333

        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885655761919836171")
            );

        // Assert
        message.Text().Should().Contain("Video attachment");

        var videoUrl = message.QuerySelector("video source")?.GetAttribute("src");

        videoUrl.Should().Be(
            "https://cdn.discordapp.com/attachments/885587741654536192/885655761512968233/file_example_MP4_640_3MG.mp4"
            );
    }
    public async Task Message_with_a_Lottie_based_sticker_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.StickerTestCases,
            Snowflake.Parse("939670526517997590")
            );

        // Assert
        var sticker = message
                      .GetProperty("stickers")
                      .EnumerateArray()
                      .Single();

        sticker.GetProperty("id").GetString().Should().Be("816087132447178774");
        sticker.GetProperty("name").GetString().Should().Be("Yikes");
        sticker.GetProperty("format").GetString().Should().Be("Lottie");
        sticker.GetProperty("sourceUrl").GetString().Should().Be("https://discord.com/stickers/816087132447178774.json");
    }
示例#26
0
    public async Task Message_with_an_image_attachment_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsHtmlAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885654862656843786")
            );

        // Assert
        message.Text().Should().Contain("Image attachment");

        message
        .QuerySelectorAll("img")
        .Select(e => e.GetAttribute("src"))
        .Should()
        .Contain(
            "https://cdn.discordapp.com/attachments/885587741654536192/885654862430359613/bird-thumbnail.png"
            );
    }
示例#27
0
    public async Task Message_with_a_generic_attachment_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885587844989612074")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Generic file attachment");

        var attachments = message.GetProperty("attachments").EnumerateArray().ToArray();

        attachments.Should().HaveCount(1);
        attachments.Single().GetProperty("url").GetString().Should().Be(
            "https://cdn.discordapp.com/attachments/885587741654536192/885587844964417596/Test.txt"
            );
        attachments.Single().GetProperty("fileName").GetString().Should().Be("Test.txt");
        attachments.Single().GetProperty("fileSizeBytes").GetInt64().Should().Be(11);
    }
示例#28
0
    public async Task Message_with_an_image_attachment_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885654862656843786")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Image attachment");

        var attachments = message.GetProperty("attachments").EnumerateArray().ToArray();

        attachments.Should().HaveCount(1);
        attachments.Single().GetProperty("url").GetString().Should().Be(
            "https://cdn.discordapp.com/attachments/885587741654536192/885654862430359613/bird-thumbnail.png"
            );
        attachments.Single().GetProperty("fileName").GetString().Should().Be("bird-thumbnail.png");
        attachments.Single().GetProperty("fileSizeBytes").GetInt64().Should().Be(466335);
    }
示例#29
0
    public async Task Message_with_a_video_attachment_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885655761919836171")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Video attachment");

        var attachments = message.GetProperty("attachments").EnumerateArray().ToArray();

        attachments.Should().HaveCount(1);
        attachments.Single().GetProperty("url").GetString().Should().Be(
            "https://cdn.discordapp.com/attachments/885587741654536192/885655761512968233/file_example_MP4_640_3MG.mp4"
            );
        attachments.Single().GetProperty("fileName").GetString().Should().Be("file_example_MP4_640_3MG.mp4");
        attachments.Single().GetProperty("fileSizeBytes").GetInt64().Should().Be(3114374);
    }
示例#30
0
    public async Task Message_with_an_audio_attachment_is_rendered_correctly()
    {
        // Act
        var message = await _exportWrapper.GetMessageAsJsonAsync(
            ChannelIds.AttachmentTestCases,
            Snowflake.Parse("885656175620808734")
            );

        // Assert
        message.GetProperty("content").GetString().Should().Be("Audio attachment");

        var attachments = message.GetProperty("attachments").EnumerateArray().ToArray();

        attachments.Should().HaveCount(1);
        attachments.Single().GetProperty("url").GetString().Should().Be(
            "https://cdn.discordapp.com/attachments/885587741654536192/885656175348187146/file_example_MP3_1MG.mp3"
            );
        attachments.Single().GetProperty("fileName").GetString().Should().Be("file_example_MP3_1MG.mp3");
        attachments.Single().GetProperty("fileSizeBytes").GetInt64().Should().Be(1087849);
    }