mirror of
https://github.com/TitanEmbeds/Titan.git
synced 2025-06-16 11:25:22 +02:00
Implement reactions
This commit is contained in:
@ -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:
|
||||
|
@ -22,6 +22,21 @@ class SocketIOInterface:
|
||||
msg = get_formatted_message(message)
|
||||
await self.io.emit('MESSAGE_UPDATE', data=msg, room=str("CHANNEL_"+str(message.channel.id)), namespace='/gateway')
|
||||
|
||||
async def on_reaction_add(self, message):
|
||||
if message.guild:
|
||||
msg = get_formatted_message(message)
|
||||
await self.io.emit('MESSAGE_REACTION_ADD', data=msg, room=str("CHANNEL_"+str(message.channel.id)), namespace='/gateway')
|
||||
|
||||
async def on_reaction_remove(self, message):
|
||||
if message.guild:
|
||||
msg = get_formatted_message(message)
|
||||
await self.io.emit('MESSAGE_REACTION_REMOVE', data=msg, room=str("CHANNEL_"+str(message.channel.id)), namespace='/gateway')
|
||||
|
||||
async def on_reaction_clear(self, message):
|
||||
if message.guild:
|
||||
msg = get_formatted_message(message)
|
||||
await self.io.emit('MESSAGE_REACTION_REMOVE_ALL', data=msg, room=str("CHANNEL_"+str(message.channel.id)), namespace='/gateway')
|
||||
|
||||
async def on_guild_member_add(self, member):
|
||||
user = get_formatted_user(member)
|
||||
await self.io.emit('GUILD_MEMBER_ADD', data=user, room=str("GUILD_"+str(member.guild.id)), namespace='/gateway')
|
||||
|
@ -36,6 +36,8 @@ def get_formatted_message(message):
|
||||
member = message.guild.get_member(mention["id"])
|
||||
if member:
|
||||
mention["nickname"] = member.nick
|
||||
if hasattr(message, "reactions"):
|
||||
msg["reactions"] = get_message_reactions(message.reactions)
|
||||
return msg
|
||||
|
||||
def get_formatted_user(user):
|
||||
@ -246,4 +248,26 @@ def get_embeds_list(embeds):
|
||||
em = []
|
||||
for e in embeds:
|
||||
em.append(e.to_dict())
|
||||
return em
|
||||
return em
|
||||
|
||||
def get_message_reactions(reactions):
|
||||
reacts = []
|
||||
for reaction in reactions:
|
||||
reacts.append({
|
||||
"emoji": get_partial_emoji(reaction.emoji),
|
||||
"count": reaction.count
|
||||
})
|
||||
return reacts
|
||||
|
||||
def get_partial_emoji(emoji):
|
||||
emote = {
|
||||
"animated": False,
|
||||
"id": None,
|
||||
"name": str(emoji)
|
||||
}
|
||||
if isinstance(emoji, str):
|
||||
return emote
|
||||
emote["animated"] = emoji.animated
|
||||
emote["id"] = str(emoji.id)
|
||||
emote["name"] = emoji.name
|
||||
return emote
|
Reference in New Issue
Block a user