Я пытаюсь получить возможное приглашение для пользователей, которые присоединяются к разногласиям, но это просто не работает, и я не знаю почему. Я бы ожидал, что он выдаст «не удалось найти приглашение» для ботов, но вместо этого он вообще ничего не говорит, ни для пользователей, ни для ботов. Это должно работать, насколько мне известно. Он сканирует каждое приглашение на серверах и сохраняет их, затем проверяет, подходит ли он пользователю, который присоединяется, и выводит код для вставки.
def __init__(self, bot):
self.bot.loop.create_task(self.get_invites())
async def get_invites(self):
for guild in self.bot.guilds:
try:
guild_invites = {}
invites = await guild.invites()
for invite in invites:
guild_invites[invite.code] = invite
self.invites[guild] = guild_invites
except discord.errors.Forbidden:
pass
async def find_possible_invites(self,guild):
i = 1
while i < 11:
new = await guild.invites()
res = []
for invite in new:
try:
old_uses = self.invites[guild][invite.code].uses
except KeyError:
self.invites[guild][invite.code] = invite
if invite.uses >= 1:
res.append(invite)
continue
new_uses = invite.uses
if old_uses < new_uses :
self.invites[guild][invite.code] = invite
res.append(invite)
if res == []:
await asyncio.sleep(3)
i+=1
else:
break
return res
@commands.Cog.listener()
async def on_member_join(self,member):
server = await self.bot.get_guild(SERVER_ID)
possible_invites = await self.find_possible_invites(server)
channel = self.bot.get_channel(CHANNEL_ID)
whtspace= "** **"
embed = discord.Embed(color=0x21d3f3)
embed.title = "Member Joined!"
embed.add_field(name="Name",value=str(member))
embed.add_field(name="User ID:",value=member.id)
if len(possible_invites) == 1:
embed.add_field(name="Invite used",value=possible_invites[0].url,inline=True)
embed.add_field(name="Invite created by",value=str(possible_invites[0].inviter),inline=True)
embed.add_field(name="Number of uses",value=str(possible_invites[0].uses),inline=True)
elif len(possible_invites) > 1:
embed.add_field(name="Possible invites used:",value=whtspace,inline=False)
for i in possible_invites:
embed.add_field(name=whtspace,value=i.url,inline=False)
else:
await channel.send("Invite used could not be detected")
await channel.send(embed=embed)