diff --git a/PluralKit.Bot/Commands/MemberProxy.cs b/PluralKit.Bot/Commands/MemberProxy.cs index d09ea4cf..44873fb8 100644 --- a/PluralKit.Bot/Commands/MemberProxy.cs +++ b/PluralKit.Bot/Commands/MemberProxy.cs @@ -26,6 +26,7 @@ namespace PluralKit.Bot { // // Make sure there's one and only one instance of "text" in the example proxy given var prefixAndSuffix = exampleProxy.Split("text"); + if (prefixAndSuffix.Length == 1) prefixAndSuffix = prefixAndSuffix[0].Split("TEXT"); if (prefixAndSuffix.Length < 2) throw Errors.ProxyMustHaveText; if (prefixAndSuffix.Length > 2) throw Errors.ProxyMultipleText; return new ProxyTag(prefixAndSuffix[0], prefixAndSuffix[1]); diff --git a/PluralKit.Bot/Handlers/MessageCreated.cs b/PluralKit.Bot/Handlers/MessageCreated.cs index 30ced3ee..002a641a 100644 --- a/PluralKit.Bot/Handlers/MessageCreated.cs +++ b/PluralKit.Bot/Handlers/MessageCreated.cs @@ -103,7 +103,7 @@ namespace PluralKit.Bot if (content == null) return false; // Check for command prefix - if (!HasCommandPrefix(content, shard.User?.Id ?? default, out var cmdStart)) + if (!HasCommandPrefix(content, shard.User?.Id ?? default, out var cmdStart) || cmdStart == content.Length) return false; // Trim leading whitespace from command without actually modifying the string diff --git a/PluralKit.Bot/Proxy/ProxyService.cs b/PluralKit.Bot/Proxy/ProxyService.cs index 32781447..bb0f6232 100644 --- a/PluralKit.Bot/Proxy/ProxyService.cs +++ b/PluralKit.Bot/Proxy/ProxyService.cs @@ -116,7 +116,7 @@ namespace PluralKit.Bot if (repliedTo != null) { var nickname = await FetchReferencedMessageAuthorNickname(trigger, repliedTo); - var embed = CreateReplyEmbed(trigger, repliedTo, nickname); + var embed = CreateReplyEmbed(match, trigger, repliedTo, nickname); if (embed != null) embeds.Add(embed); } @@ -160,7 +160,7 @@ namespace PluralKit.Bot } } - private Embed CreateReplyEmbed(Message trigger, Message repliedTo, string? nickname) + private Embed CreateReplyEmbed(ProxyMatch match, Message trigger, Message repliedTo, string? nickname) { // repliedTo doesn't have a GuildId field :/ var jumpLink = $"https://discord.com/channels/{trigger.GuildId}/{repliedTo.ChannelId}/{repliedTo.Id}"; @@ -198,7 +198,8 @@ namespace PluralKit.Bot { // unicodes: [three-per-em space] [left arrow emoji] [force emoji presentation] Author = new($"{username}\u2004\u21a9\ufe0f", IconUrl: avatarUrl), - Description = content.ToString() + Description = content.ToString(), + Color = match.Member.Color?.ToDiscordColor(), }; } @@ -292,4 +293,4 @@ namespace PluralKit.Bot if (proxyName.Length > Limits.MaxProxyNameLength) throw Errors.ProxyNameTooLong(proxyName); } } -} \ No newline at end of file +} diff --git a/PluralKit.Core/Database/Functions/ProxyMember.cs b/PluralKit.Core/Database/Functions/ProxyMember.cs index fc18a582..681ef179 100644 --- a/PluralKit.Core/Database/Functions/ProxyMember.cs +++ b/PluralKit.Core/Database/Functions/ProxyMember.cs @@ -19,7 +19,9 @@ namespace PluralKit.Core public string? ServerAvatar { get; } public string? Avatar { get; } + public bool AllowAutoproxy { get; } + public string? Color { get; } public string ProxyName(MessageContext ctx) => ctx.SystemTag != null ? $"{ServerName ?? DisplayName ?? Name} {ctx.SystemTag}" diff --git a/PluralKit.Core/Database/Functions/functions.sql b/PluralKit.Core/Database/Functions/functions.sql index f959f447..55628d49 100644 --- a/PluralKit.Core/Database/Functions/functions.sql +++ b/PluralKit.Core/Database/Functions/functions.sql @@ -64,10 +64,12 @@ create function proxy_members(account_id bigint, guild_id bigint) server_name text, display_name text, name text, - + server_avatar text, avatar text, + color char(6), + allow_autoproxy bool ) as $$ @@ -86,6 +88,8 @@ as $$ member_guild.avatar_url as server_avatar, members.avatar_url as avatar, + members.color as color, + members.allow_autoproxy as allow_autoproxy from accounts inner join systems on systems.id = accounts.system