TypeError: argument of type 'Guild' is not iterable
Нужно сделать проверку при вступлении на сервер, есть ли человек на другом дискорд сервере - получить его роли - если есть определённая роль - выдать ему здесь отдельную роль
channel = bot.get_channel(989555562377277551)
role = discord.utils.get(member.guild.roles, id = 968234676152074240)
guildlmq = bot.get_guild(1033138116153835580)
rolemq = discord.utils.get(guildlmq.roles, id=1033138116191596680)
mqfamq = discord.utils.get(member.guild.roles, id = 1033829865859862588)
if member in guildlmq and rolemq in member.guildlmq.roles:
await member.add_roles(mqfamq)
await channel.send(f'<@{member.id}>\n1')
else:
await member.add_roles(role)
await channel.send(f'<@{member.id}>\n2')
Ответы (2 шт):
Автор решения: denisnumb
→ Ссылка
Проверять наличие пользователя на сервере нужно проверяя его наличие в списке участников сервера, а не просто где-то внутри сервера.
То есть, вместо
if member in guildlmq
Проверять так:
if member in guildlmq.members
Автор решения: q r t s
→ Ссылка
Есть более простой вариант.
Создаем ивент:
@client.event
async def on_member_join(member):
Далее просто выдаем пользователю роль по айди:
role1 = discord.utils.get(member.guild.roles, id = roleid)
role2 = discord.utils.get(member.guild.roles, id = roleid)
await member.add_roles(role1, role2)
Можно проверить является ли вступивший ботом:
if not member.bot:
Это будет работать без проверки сервера, но постоянно вызывать ошибку в консоль если пользователь присоединился к серверу без имеющейся роли. Соответственно это можно проверить:
if member.guild.id == 'guildid':
Полный код:
@client.event
async def on_member_join(member):
if not member.bot:
if member.guild.id == 'guildid':
role1 = discord.utils.get(member.guild.roles, id = roleid)
role2 = discord.utils.get(member.guild.roles, id = roleid)
await member.add_roles(role1, role2)