Add handling command ❌ reactions
and, uhh, rename invoker_id to author_id
This commit is contained in:
		| @@ -48,12 +48,15 @@ namespace PluralKit.Bot | ||||
|                 _db.Execute(c => _repo.GetMessage(c, evt.Message.Id)); | ||||
|  | ||||
|             FullMessage msg; | ||||
|             CommandMessage cmdmsg; | ||||
|             switch (evt.Emoji.Name) | ||||
|             { | ||||
|                 // Message deletion | ||||
|                 case "\u274C": // Red X | ||||
|                     if ((msg = await GetMessage()) != null) | ||||
|                         await HandleDeleteReaction(evt, msg); | ||||
|                     else if ((cmdmsg = await _db.Execute(conn => _repo.GetCommandMessage(conn, evt.Message.Id))) != null) | ||||
|                         await HandleCommandDeleteReaction(evt, cmdmsg); | ||||
|                     break;                 | ||||
|                  | ||||
|                 case "\u2753": // Red question mark | ||||
| @@ -92,6 +95,25 @@ namespace PluralKit.Bot | ||||
|             await _db.Execute(c => _repo.DeleteMessage(c, evt.Message.Id)); | ||||
|         } | ||||
|  | ||||
|         private async ValueTask HandleCommandDeleteReaction(MessageReactionAddEventArgs evt, CommandMessage msg) | ||||
|         { | ||||
|             if (!evt.Channel.BotHasAllPermissions(Permissions.ManageMessages)) return; | ||||
|  | ||||
|             // Can only delete your own message | ||||
|             if (msg.author_id != evt.User.Id) return; | ||||
|  | ||||
|             try | ||||
|             { | ||||
|                 await evt.Message.DeleteAsync(); | ||||
|             } | ||||
|             catch (NotFoundException) | ||||
|             { | ||||
|                 // Message was deleted by something/someone else before we got to it | ||||
|             } | ||||
|  | ||||
|             // No need to delete database row here, it'll get deleted by the once-per-minute scheduled task. | ||||
|         } | ||||
|  | ||||
|         private async ValueTask HandleQueryReaction(MessageReactionAddEventArgs evt, FullMessage msg) | ||||
|         { | ||||
|             // Try to DM the user info about the message | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
| create table command_message | ||||
| ( | ||||
| 	message_id bigint primary key, | ||||
| 	invoker_id bigint not null, | ||||
| 	author_id bigint not null, | ||||
| 	timestamp timestamp not null default now() | ||||
| ); | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,16 @@ namespace PluralKit.Core | ||||
|     public partial class ModelRepository | ||||
| 	{ | ||||
| 		public Task SaveCommandMessage(IPKConnection conn, ulong message_id, ulong author_id) => | ||||
| 			conn.QueryAsync("insert into command_message (message_id, invoker_id) values (@Message, @Author)", | ||||
| 			conn.QueryAsync("insert into command_message (message_id, author_id) values (@Message, @Author)", | ||||
| 				new {Message = message_id, Author = author_id }); | ||||
|  | ||||
| 		public Task<CommandMessage> GetCommandMessage(IPKConnection conn, ulong message_id) => | ||||
| 			conn.QuerySingleOrDefaultAsync<CommandMessage>("select message_id, author_id from command_message where message_id = @Message",  | ||||
| 				new {Message = message_id}); | ||||
| 	} | ||||
|  | ||||
| 	public class CommandMessage | ||||
| 	{ | ||||
| 		public ulong author_id { get; set; } | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user