(self, member: discord.Member)
| 1343 | for invite in invites |
| 1344 | } |
| 1345 | |
| 1346 | async def get_join_method(self, member: discord.Member) -> str | None: |
| 1347 | view_audit_logs, manage_guild = ( |
| 1348 | member.guild.me.guild_permissions.view_audit_log, |
| 1349 | member.guild.me.guild_permissions.manage_guild, |
| 1350 | ) |
| 1351 | if member.bot: |
| 1352 | if view_audit_logs: |
| 1353 | async for entry in member.guild.audit_logs( |
| 1354 | limit=3, |
| 1355 | action=discord.AuditLogAction.bot_add, |
| 1356 | ): |
| 1357 | if entry.target.id == member.id: |
| 1358 | return _("- Added by {user.mention} (`{user}`) - `{user.id}`").format( |
| 1359 | user=entry.user, |
| 1360 | ) |
| 1361 | return None |
| 1362 | if "VANITY_URL" in member.guild.features and member.guild.vanity_url is not None: |
| 1363 | possible_invite = _("- {vanity_url} (Vanity URL)").format( |
| 1364 | vanity_url=member.guild.vanity_url, |
| 1365 | ) |
| 1366 | else: |
| 1367 | possible_invite = None |
| 1368 | if self.invites_cache[member.guild] and manage_guild: |
| 1369 | invites = self.invites_cache[member.guild].copy() |
| 1370 | guild_invites = await member.guild.invites() |
| 1371 | for invite in guild_invites: |
| 1372 | if invite.code in invites: |
| 1373 | if invite.uses is None or invites[invite.code]["uses"] is None: |
| 1374 | continue |
| 1375 | if invite.uses > invites[invite.code]["uses"]: |
| 1376 | possible_invite = _( |
| 1377 | "- https://discord.gg/{invite.code}\n- Invited by {inviter.mention} (`{inviter}`) - `{inviter.id}`", |
| 1378 | ).format(invite=invite, inviter=invite.inviter) |
| 1379 | break |
| 1380 | if possible_invite is None: |
| 1381 | for code, data in invites.items(): |
| 1382 | try: |
| 1383 | invite = await self.cog.bot.fetch_invite(code) |
| 1384 | except discord.NotFound: |
| 1385 | if data["max_uses"] is not None and (data["max_uses"] - data["uses"]) == 1: |
| 1386 | possible_invite = _( |
| 1387 | "- https://discord.gg/{code}\n- Invited by {inviter.mention} (`{inviter}`) - `{inviter.id}`", |
| 1388 | ).format(code=code, inviter=data["inviter"]) |
| 1389 | break |
| 1390 | await self.cache_invites() # Refresh cache. |
| 1391 | if possible_invite is None and view_audit_logs: |
| 1392 | async for entry in member.guild.audit_logs( |
| 1393 | limit=1, |
| 1394 | action=discord.AuditLogAction.invite_create, |
| 1395 | ): |
| 1396 | if entry.target.id == member.id: |
| 1397 | possible_invite = _( |
| 1398 | "- https://discord.gg/{entry.target.code}\n- Invited by {entry.user.mention} (`{entry.user}`) - `{entry.user.id}`", |
| 1399 | ).format(entry=entry) |
| 1400 | break |
| 1401 | return possible_invite |
| 1402 |
no test coverage detected