Bladeren bron

Optimized raw_reaction_add for mod actions to make fewer requests. Errors now logged with bot_log

master
Rocketsoup 1 jaar geleden
bovenliggende
commit
57cf1bdd8e
3 gewijzigde bestanden met toevoegingen van 35 en 29 verwijderingen
  1. 6
    7
      bot.py
  2. 23
    16
      rocketbot/cogs/basecog.py
  3. 6
    6
      rocketbot/cogs/logcog.py

+ 6
- 7
bot.py Bestand weergeven

42
 		super().__init__(command_prefix, **kwargs)
42
 		super().__init__(command_prefix, **kwargs)
43
 
43
 
44
 	async def on_command_error(self, context: commands.Context, exception):
44
 	async def on_command_error(self, context: commands.Context, exception):
45
-		for line in traceback.format_stack():
46
-			print(line.strip())
45
+		bot_log(None, None, 'Command error:\n' + '\n'.join(traceback.format_stack()))
47
 		if context.guild is None or \
46
 		if context.guild is None or \
48
 				context.message.channel is None or \
47
 				context.message.channel is None or \
49
 				context.message.author.bot:
48
 				context.message.author.bot:
61
 		# traceback.print_exception(type(exception), exception, exception.__traceback__)
60
 		# traceback.print_exception(type(exception), exception, exception.__traceback__)
62
 
61
 
63
 	async def on_error(self, event_method, args=None, kwargs=None):
62
 	async def on_error(self, event_method, args=None, kwargs=None):
64
-		print('Event caused error')
65
-		print(f'	event method: {event_method}')
66
-		print(f'	event args: {args}')
67
-		print(f'	event kwargs: {kwargs}')
68
-		print(traceback.format_exc())
63
+		bot_log(None, None, 'Event caused error\n' + \
64
+			f'	event method: {event_method}' + \
65
+			f'	event args: {args}' + \
66
+			f'	event kwargs: {kwargs}' + \
67
+			traceback.format_exc())
69
 
68
 
70
 async def start_bot():
69
 async def start_bot():
71
 	intents = Intents.default()
70
 	intents = Intents.default()

+ 23
- 16
rocketbot/cogs/basecog.py Bestand weergeven

180
 	@commands.Cog.listener()
180
 	@commands.Cog.listener()
181
 	async def on_raw_reaction_add(self, payload: RawReactionActionEvent):
181
 	async def on_raw_reaction_add(self, payload: RawReactionActionEvent):
182
 		'Event handler'
182
 		'Event handler'
183
+		# Avoid any unnecessary requests. Gets called for every reaction
184
+		# multiplied by every active cog.
183
 		if payload.user_id == self.bot.user.id:
185
 		if payload.user_id == self.bot.user.id:
184
 			# Ignore bot's own reactions
186
 			# Ignore bot's own reactions
185
 			return
187
 			return
186
-		member: Member = payload.member
187
-		if member is None:
188
-			return
189
-		guild: Guild = self.bot.get_guild(payload.guild_id)
188
+
189
+		guild: Guild = self.bot.get_guild(payload.guild_id) or await self.bot.fetch_guild(payload.guild_id)
190
 		if guild is None:
190
 		if guild is None:
191
 			# Possibly a DM
191
 			# Possibly a DM
192
 			return
192
 			return
193
-		channel: GuildChannel = guild.get_channel(payload.channel_id)
194
-		if channel is None:
195
-			# Possibly a DM
196
-			return
197
-		message: Message = await channel.fetch_message(payload.message_id)
198
-		if message is None:
199
-			# Message deleted?
200
-			return
201
-		if message.author.id != self.bot.user.id:
202
-			# Bot didn't author this
203
-			return
193
+
204
 		guild_messages = self.__bot_messages(guild)
194
 		guild_messages = self.__bot_messages(guild)
205
-		bot_message = guild_messages.get(message.id)
195
+		bot_message = guild_messages.get(payload.message_id)
206
 		if bot_message is None:
196
 		if bot_message is None:
207
 			# Unknown message (expired or was never tracked)
197
 			# Unknown message (expired or was never tracked)
208
 			return
198
 			return
213
 		if reaction is None or not reaction.is_enabled:
203
 		if reaction is None or not reaction.is_enabled:
214
 			# Can't use this reaction with this message
204
 			# Can't use this reaction with this message
215
 			return
205
 			return
206
+
207
+		channel: GuildChannel = guild.get_channel(payload.channel_id) or await guild.fetch_channel(payload.channel_id)
208
+		if channel is None:
209
+			# Possibly a DM
210
+			return
211
+		member: Member = payload.member
212
+		if member is None:
213
+			return
216
 		if not channel.permissions_for(member).ban_members:
214
 		if not channel.permissions_for(member).ban_members:
217
 			# Not a mod (could make permissions configurable per BotMessageReaction some day)
215
 			# Not a mod (could make permissions configurable per BotMessageReaction some day)
218
 			return
216
 			return
217
+
218
+		message: Message = await channel.fetch_message(payload.message_id)
219
+		if message is None:
220
+			# Message deleted?
221
+			return
222
+		if message.author.id != self.bot.user.id:
223
+			# Bot didn't author this
224
+			return
225
+
219
 		await self.on_mod_react(bot_message, reaction, member)
226
 		await self.on_mod_react(bot_message, reaction, member)
220
 
227
 
221
 	async def on_mod_react(self,
228
 	async def on_mod_react(self,

+ 6
- 6
rocketbot/cogs/logcog.py Bestand weergeven

524
 		"""
524
 		"""
525
 		if payload.cached_message:
525
 		if payload.cached_message:
526
 			return  # already handled by on_message_edit
526
 			return  # already handled by on_message_edit
527
-		guild = await self.bot.fetch_guild(payload.guild_id)
527
+		guild = self.bot.get_guild(payload.guild_id) or await self.bot.fetch_guild(payload.guild_id)
528
 		if not guild:
528
 		if not guild:
529
 			return
529
 			return
530
 		if not self.get_guild_setting(guild, self.SETTING_ENABLED):
530
 		if not self.get_guild_setting(guild, self.SETTING_ENABLED):
531
 			return
531
 			return
532
-		channel = await guild.fetch_channel(payload.channel_id)
532
+		channel = guild.get_channel(payload.channel_id) or await guild.fetch_channel(payload.channel_id)
533
 		if not channel:
533
 		if not channel:
534
 			return
534
 			return
535
 		message = await channel.fetch_message(payload.message_id)
535
 		message = await channel.fetch_message(payload.message_id)
568
 			bot_message = BotMessage(message.guild, text, BotMessage.TYPE_LOG, suppress_embeds=True)
568
 			bot_message = BotMessage(message.guild, text, BotMessage.TYPE_LOG, suppress_embeds=True)
569
 			await bot_message.update()
569
 			await bot_message.update()
570
 		else:
570
 		else:
571
-			guild = await self.bot.fetch_guild(payload.guild_id)
571
+			guild = self.bot.get_guild(payload.guild_id) or await self.bot.fetch_guild(payload.guild_id)
572
 			if not guild:
572
 			if not guild:
573
 				return
573
 				return
574
 			if not self.get_guild_setting(guild, self.SETTING_ENABLED):
574
 			if not self.get_guild_setting(guild, self.SETTING_ENABLED):
575
 				return
575
 				return
576
-			channel = await guild.fetch_channel(payload.channel_id)
576
+			channel = guild.get_channel(payload.channel_id) or await guild.fetch_channel(payload.channel_id)
577
 			if not channel:
577
 			if not channel:
578
 				return
578
 				return
579
 			text = f'Message {payload.message_id} deleted in ' + channel.mention + ' but content and author not available in cache.'
579
 			text = f'Message {payload.message_id} deleted in ' + channel.mention + ' but content and author not available in cache.'
592
 
592
 
593
 		https://discordpy.readthedocs.io/en/stable/api.html#discord.on_raw_bulk_message_delete
593
 		https://discordpy.readthedocs.io/en/stable/api.html#discord.on_raw_bulk_message_delete
594
 		"""
594
 		"""
595
-		guild = await self.bot.fetch_guild(payload.guild_id)
595
+		guild = self.bot.get_guild(payload.guild_id) or await self.bot.fetch_guild(payload.guild_id)
596
 		if not guild:
596
 		if not guild:
597
 			return
597
 			return
598
 		if not self.get_guild_setting(guild, self.SETTING_ENABLED):
598
 		if not self.get_guild_setting(guild, self.SETTING_ENABLED):
599
 			return
599
 			return
600
-		channel = await guild.fetch_channel(payload.channel_id)
600
+		channel = guild.get_channel(payload.channel_id) or await guild.fetch_channel(payload.channel_id)
601
 		count = len(payload.message_ids)
601
 		count = len(payload.message_ids)
602
 		cached_count = len(payload.cached_messages)
602
 		cached_count = len(payload.cached_messages)
603
 		uncached_count = count - cached_count
603
 		uncached_count = count - cached_count

Laden…
Annuleren
Opslaan