Render voice channel mentions

Closes #636
pull/678/head
Tyrrrz 3 years ago
parent b58e67776c
commit ae42554621

@ -31,6 +31,10 @@ namespace DiscordChatExporter.Cli.Commands
await foreach (var channel in Discord.GetGuildChannelsAsync(guild.Id))
{
// Skip non-text channels
if (!channel.IsTextChannel)
continue;
channels.Add(channel);
}
}

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Linq;
using System.Threading.Tasks;
using CliFx.Attributes;
using CliFx.Infrastructure;
using DiscordChatExporter.Cli.Commands.Base;
@ -17,9 +18,10 @@ namespace DiscordChatExporter.Cli.Commands
// Get channel metadata
await console.Output.WriteLineAsync("Fetching channels...");
var channels = await Discord.GetGuildChannelsAsync(Guild.DirectMessages.Id);
var textChannels = channels.Where(c => c.IsTextChannel).ToArray();
// Export
await ExportAsync(console, channels);
await ExportAsync(console, textChannels);
}
}
}

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Linq;
using System.Threading.Tasks;
using CliFx.Attributes;
using CliFx.Infrastructure;
using DiscordChatExporter.Cli.Commands.Base;
@ -20,9 +21,10 @@ namespace DiscordChatExporter.Cli.Commands
// Get channel metadata
await console.Output.WriteLineAsync("Fetching channels...");
var channels = await Discord.GetGuildChannelsAsync(GuildId);
var textChannels = channels.Where(c => c.IsTextChannel).ToArray();
// Export
await ExportAsync(console, channels);
await ExportAsync(console, textChannels);
}
}
}

@ -19,7 +19,13 @@ namespace DiscordChatExporter.Cli.Commands
{
var channels = await Discord.GetGuildChannelsAsync(GuildId);
foreach (var channel in channels.OrderBy(c => c.Category.Position).ThenBy(c => c.Name))
var textChannels = channels
.Where(c => c.IsTextChannel)
.OrderBy(c => c.Category.Position)
.ThenBy(c => c.Name)
.ToArray();
foreach (var channel in textChannels)
{
// Channel ID
await console.Output.WriteAsync(channel.Id.ToString());

@ -16,7 +16,13 @@ namespace DiscordChatExporter.Cli.Commands
{
var channels = await Discord.GetGuildChannelsAsync(Guild.DirectMessages.Id);
foreach (var channel in channels.OrderBy(c => c.Name))
var textChannels = channels
.Where(c => c.IsTextChannel)
.OrderBy(c => c.Category.Position)
.ThenBy(c => c.Name)
.ToArray();
foreach (var channel in textChannels)
{
// Channel ID
await console.Output.WriteAsync(channel.Id.ToString());

@ -21,6 +21,8 @@ namespace DiscordChatExporter.Core.Discord.Data
ChannelType.GuildNews or
ChannelType.GuildStore;
public bool IsVoiceChannel => !IsTextChannel;
public Snowflake GuildId { get; }
public ChannelCategory Category { get; }

@ -142,10 +142,6 @@ namespace DiscordChatExporter.Core.Discord
var channel = Channel.Parse(channelJson, category, position);
// We are only interested in text channels
if (!channel.IsTextChannel)
continue;
position++;
yield return channel;

@ -99,11 +99,12 @@ namespace DiscordChatExporter.Core.Exporting.Writers.MarkdownVisitors
else if (mention.Kind == MentionKind.Channel)
{
var channel = mentionId?.Pipe(_context.TryGetChannel);
var symbol = channel?.IsVoiceChannel == true ? "🔊" : "#";
var name = channel?.Name ?? "deleted-channel";
_buffer
.Append("<span class=\"mention\">")
.Append("#").Append(HtmlEncode(name))
.Append(symbol).Append(HtmlEncode(name))
.Append("</span>");
}
else if (mention.Kind == MentionKind.Role)

@ -43,6 +43,10 @@ namespace DiscordChatExporter.Core.Exporting.Writers.MarkdownVisitors
var name = channel?.Name ?? "deleted-channel";
_buffer.Append($"#{name}");
// Voice channel marker
if (channel?.IsVoiceChannel == true)
_buffer.Append(" [voice]");
}
else if (mention.Kind == MentionKind.Role)
{

@ -135,7 +135,7 @@ namespace DiscordChatExporter.Core.Markdown.Parsing
// Capture <#123456>
private static readonly IMatcher<MarkdownNode> ChannelMentionNodeMatcher = new RegexMatcher<MarkdownNode>(
new Regex("<#(\\d+)>", DefaultRegexOptions),
new Regex("<#!?(\\d+)>", DefaultRegexOptions),
(_, m) => new MentionNode(m.Groups[1].Value, MentionKind.Channel)
);

@ -168,7 +168,8 @@ namespace DiscordChatExporter.Gui.ViewModels
var guildChannelMap = new Dictionary<Guild, IReadOnlyList<Channel>>();
await foreach (var guild in discord.GetUserGuildsAsync())
{
guildChannelMap[guild] = await discord.GetGuildChannelsAsync(guild.Id);
var channels = await discord.GetGuildChannelsAsync(guild.Id);
guildChannelMap[guild] = channels.Where(c => c.IsTextChannel).ToArray();
}
GuildChannelMap = guildChannelMap;

Loading…
Cancel
Save