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)
→ Ссылка