Implement reactions

This commit is contained in:
Jeremy Zhang
2018-07-27 08:57:54 +00:00
parent 4aa785d4cc
commit 1629a8982c
7 changed files with 174 additions and 2 deletions

View File

@ -102,6 +102,18 @@ class Titan(discord.AutoShardedClient):
self.delete_list.append(message.id)
await self.redisqueue.delete_message(message)
await self.socketio.on_message_delete(message)
async def on_reaction_add(self, reaction, user):
await self.redisqueue.update_message(reaction.message)
await self.socketio.on_reaction_add(reaction.message)
async def on_reaction_remove(self, reaction, user):
await self.redisqueue.update_message(reaction.message)
await self.socketio.on_reaction_remove(reaction.message)
async def on_reaction_clear(self, message, reactions):
await self.redisqueue.update_message(message)
await self.socketio.on_reaction_clear(message)
async def on_guild_join(self, guild):
await self.redisqueue.update_guild(guild)
@ -206,6 +218,31 @@ class Titan(discord.AutoShardedClient):
msg = discord.Message(channel=channel, state=self._connection, data=data) # Procreate a fake message object
await self.on_message_delete(msg)
async def on_raw_reaction_add(self, payload):
message_id = payload.message_id
if not self.in_messages_cache(message_id):
channel = self.get_channel(payload.channel_id)
message = await channel.get_message(message_id)
await self.on_reaction_add(message.reactions[0], None)
async def on_raw_reaction_remove(self, payload):
message_id = payload.message_id
if not self.in_messages_cache(message_id):
partial = payload.emoji
emoji = self._connection._upgrade_partial_emoji(partial)
channel = self.get_channel(payload.channel_id)
message = await channel.get_message(message_id)
message._add_reaction({"me": payload.user_id == self.user.id}, emoji, payload.user_id)
reaction = message._remove_reaction({}, emoji, payload.user_id)
await self.on_reaction_remove(reaction, None)
async def on_raw_reaction_clear(self, payload):
message_id = payload.message_id
if not self.in_messages_cache(message_id):
channel = self.get_channel(payload.channel_id)
message = await channel.get_message(message_id)
await self.on_reaction_clear(message, [])
def in_messages_cache(self, msg_id):
for msg in self._connection._messages:
if msg.id == msg_id: