На каких серверах находится пользователь

Рейтинг: 0Ответов: 1Опубликовано: 23.02.2023

Я хотел узнать, как узнать на каких серверах пользователь находится (disnake)? Вот пример (как мне казалось, но такого нет)

@bot.command()
async def tet(ctx):
    for guil in bot.guilds:
        for member in guil.members:
            for guild in member.guilds:
                print(guild)

С ошибкой:

25920000
Бот готов к работе
Ignoring exception in command tet:
Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 173, in wrapped
    ret = await coro(*args, **kwargs)
  File "<string>", line 657, in tet
AttributeError: 'Member' object has no attribute 'guilds'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/bot_base.py", line 591, in invoke
    await ctx.command.invoke(ctx)
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 914, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 182, in wrapped
    raise CommandInvokeError(exc) from exc
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Member' object has no attribute 'guilds'

Ответы

▲ 0Принят

Вы не можете узнать на каких серверах находится пользователь.

Возможно узнать только сервера на которых находится бот и пользователь.

Для этого создаём переменную в которую будут внесены данные:

    test = ""

Затем перебираем список гильдий бота:

    for guild in bot.guilds:

Далее если этот пользователь находится на сервере где есть бот..

        if ctx.author in guild.members:

Он записывает его в переменную:

            if test == "":
                test = f"{guild}"
            else:
                test = f"{test}, {guild}"

Отправляем сообщение с результатом и радуемся.

    await ctx.send(test)

Полный код:

@bot.command()
async def test(ctx):
    test = ""
    for guild in bot.guilds:
        if ctx.author in guild.members:
            if test == "":
                test = f"{guild}"
            else:
                test = f"{test}, {guild}"
    await ctx.send(test)