Как получить идентификатор гильдии

#python #python-3.x #discord #discord.py #discord.py-rewrite

#python #python-3.x #Discord #discord.py

Вопрос:

Я создавал бота, который требовал от меня получения идентификатора гильдии, куда было отправлено «сообщение», допустим, это мой код:

 @bot.command()
async def ok(ctx):
    # make a variable name guild_id and store the servers ID in it
    await ctx.send(guild_id)
  

Комментарии:

1. Вы можете просто использовать ctx.guild.id

Ответ №1:

Вы можете использовать ctx.guild.id вот так:

 @bot.command()
async def ok(ctx):
    guild_id = ctx.guild.id
    await ctx.send(guild_id)
  

Это возвращает только идентификатор гильдии, который использовала команда. Если вам нужен список, вы можете использовать это:

 @bot.command()
async def ok(ctx):
    guild_id = []
    if ctx.guild.id not in guild_id:
        guild_id.append(ctx.guild.id)
    await ctx.send(guild_id)
  

Это вернет список идентификаторов гильдии.

Ответ №2:

Используйте команду discord.Guild.id Код будет выглядеть следующим образом

     @bot.command()
    async def ok(ctx):
        # make a variable name guild_id and store the servers ID in it
        guild_id = []
        if ctx.guild.id not in guild_id:
            guild_id.append(ctx.guild.id)
            await ctx.send(guild_id[-1])
        else:
            await ctx.send(ctx.guild.id)
  

Это создаст список со всеми гильдиями, в которых использовался этот бот, и выведет идентификатор гильдии, в которой бот находится в данный момент. Для получения дополнительной информации ознакомьтесь с документацией по гильдиям
Надеюсь, это поможет.

Редактировать: повышение эффективности кода, поскольку в комментариях указана проблема с кодом.

Комментарии:

1. Ваш guild_id — это пустой массив. Затем вы получаете его длину и затем пытаетесь выполнить итерацию по int объекту, который выдаст ошибку. Перебор по пустому массиву также не имеет смысла. discord.Guild.id обращается к переменной объекта класса, не имеющего экземпляра. Вы, вероятно, имели в виду написать что-то вроде ctx.guild.id . Вы, вероятно, также хотели определить массив guild_id , но затем вы также заполняете его? Я не могу понять смысл вашего кода. Вы должны использовать client.guilds

2. Этот код не будет работать, но даже если вы заставите его работать, он неэффективен. Почему вы создали цикл for вместо того, чтобы просто делать if ctx.guild.id not in guild_id: ?

3. Спасибо за предложения, ребята! Я отредактирую свой код, чтобы он был более эффективным и имел смысл.