Handle send message/embed links permission erorrs gracefully
This commit is contained in:
		@@ -316,7 +316,15 @@ namespace PluralKit.Bot
 | 
			
		||||
                                          msg.Content.Substring(argPos).TrimStart().Length;
 | 
			
		||||
                argPos += trimStartLengthDiff;
 | 
			
		||||
 | 
			
		||||
                await _tree.ExecuteCommand(new Context(_services, msg, argPos, cachedAccount?.System));
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    await _tree.ExecuteCommand(new Context(_services, msg, argPos, cachedAccount?.System));
 | 
			
		||||
                }
 | 
			
		||||
                catch (PKError)
 | 
			
		||||
                {
 | 
			
		||||
                    // Only permission errors will ever bubble this far and be caught here instead of Context.Execute
 | 
			
		||||
                    // so we just catch and ignore these. TODO: this may need to change.
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (cachedAccount != null)
 | 
			
		||||
            {
 | 
			
		||||
@@ -329,7 +337,8 @@ namespace PluralKit.Bot
 | 
			
		||||
                }
 | 
			
		||||
                catch (PKError e)
 | 
			
		||||
                {
 | 
			
		||||
                    await arg.Channel.SendMessageAsync($"{Emojis.Error} {e.Message}");
 | 
			
		||||
                    if (arg.Channel.HasPermission(ChannelPermission.SendMessages))
 | 
			
		||||
                        await arg.Channel.SendMessageAsync($"{Emojis.Error} {e.Message}");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -343,7 +352,7 @@ namespace PluralKit.Bot
 | 
			
		||||
            // We'll fetch the event ID and send a user-facing error message.
 | 
			
		||||
            // ONLY IF this error's actually our problem. As for what defines an error as "our problem",
 | 
			
		||||
            // check the extension method :)
 | 
			
		||||
            if (exc.IsOurProblem())
 | 
			
		||||
            if (exc.IsOurProblem() && _msg.Channel.HasPermission(ChannelPermission.SendMessages))
 | 
			
		||||
            {
 | 
			
		||||
                var eid = evt.EventId;
 | 
			
		||||
                await _msg.Channel.SendMessageAsync(
 | 
			
		||||
 
 | 
			
		||||
@@ -53,8 +53,17 @@ namespace PluralKit.Bot
 | 
			
		||||
        public bool HasNext(bool skipFlags = true) => RemainderOrNull(skipFlags) != null;
 | 
			
		||||
        public string FullCommand => _parameters.FullCommand;
 | 
			
		||||
 | 
			
		||||
        public Task<IUserMessage> Reply(string text = null, Embed embed = null) =>
 | 
			
		||||
            Channel.SendMessageAsync(text, embed: embed);
 | 
			
		||||
        public Task<IUserMessage> Reply(string text = null, Embed embed = null)
 | 
			
		||||
        {
 | 
			
		||||
            if (!this.BotHasPermission(ChannelPermission.SendMessages))
 | 
			
		||||
                // Will be "swallowed" during the error handler anyway, this message is never shown.
 | 
			
		||||
                throw new PKError("PluralKit does not have permission to send messages in this channel.");
 | 
			
		||||
 | 
			
		||||
            if (embed != null && !this.BotHasPermission(ChannelPermission.EmbedLinks))
 | 
			
		||||
                throw new PKError("PluralKit does not have permission to send embeds in this channel. Please ensure I have the **Embed Links** permission enabled.");
 | 
			
		||||
            
 | 
			
		||||
            return Channel.SendMessageAsync(text, embed: embed);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Checks if the next parameter is equal to one of the given keywords. Case-insensitive.
 | 
			
		||||
 
 | 
			
		||||
@@ -82,7 +82,7 @@ namespace PluralKit.Bot {
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var msg = await ctx.Channel.SendMessageAsync(embed: await MakeEmbedForPage(0));
 | 
			
		||||
                var msg = await ctx.Reply(embed: await MakeEmbedForPage(0));
 | 
			
		||||
                if (pageCount == 1) return; // If we only have one page, don't bother with the reaction/pagination logic, lol
 | 
			
		||||
                IEmote[] botEmojis = { new Emoji("\u23EA"), new Emoji("\u2B05"), new Emoji("\u27A1"), new Emoji("\u23E9"), new Emoji(Emojis.Error) };
 | 
			
		||||
                await msg.AddReactionsAsync(botEmojis);
 | 
			
		||||
@@ -147,7 +147,7 @@ namespace PluralKit.Bot {
 | 
			
		||||
                var pageCount = (items.Count-1) / pageSize + 1;
 | 
			
		||||
                
 | 
			
		||||
                // Send the original message
 | 
			
		||||
                var msg = await ctx.Channel.SendMessageAsync($"**[Page {currPage + 1}/{pageCount}]**\n{description}\n{MakeOptionList(currPage)}");
 | 
			
		||||
                var msg = await ctx.Reply($"**[Page {currPage + 1}/{pageCount}]**\n{description}\n{MakeOptionList(currPage)}");
 | 
			
		||||
                
 | 
			
		||||
                // Add back/forward reactions and the actual indicator emojis
 | 
			
		||||
                async Task AddEmojis()
 | 
			
		||||
@@ -186,7 +186,7 @@ namespace PluralKit.Bot {
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                var msg = await ctx.Channel.SendMessageAsync($"{description}\n{MakeOptionList(0)}");
 | 
			
		||||
                var msg = await ctx.Reply($"{description}\n{MakeOptionList(0)}");
 | 
			
		||||
 | 
			
		||||
                // Add the relevant reactions (we don't care too much about awaiting)
 | 
			
		||||
                async Task AddEmojis()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user