Клиент Discord Bot.Ошибка пользователя при преобразовании в Discord.Utils в Python - PullRequest
0 голосов
/ 06 августа 2020

python 3.7.3 discord.py 1.3.4 raspberry pi 4

Я застрял в начале, после того, как все заработало.

Я начал с нуля. Когда я использую для l oop, за которым следует мой print(f'{client.user}, у меня нет проблем, и имя пользователя бота выводится на терминал. Когда я отказываюсь от l oop и использую код guild = discord.utils.get(client.guilds, name=GUILD), я получаю следующую ошибку в терминале.

Игнорирование исключения в on_ready Traceback (последний вызов последний): File "/ home /pi/.local/lib/python3.7/site-packages/discord/client.py ", строка 312, в _run_event await coro (* args, ** kwargs) File" / home / pi / TackleBot / bot2 .py ", строка 27, в on_ready f '{client.user} связан со следующей гильдией: \ n' AttributeError: объект 'NoneType' не имеет атрибута 'name'

Если я добавлю команда print(client.user) сразу после команды guild = discord.utils.get, она напечатает имя пользователя там, и все равно ошибка ниже. Я часами просматривал документацию, и вот где я сейчас нахожусь. Все еще в замешательстве. Если я закомментирую l oop, я получу ошибку. Если я закомментирую служебную команду discord, она работает нормально. Никогда ничего не меняю с блоком print(f'{client.user}.

Я учусь, как go, любая помощь или совет очень ценятся. Спасибо!

    import os
    
    import discord

    from dotenv import load_dotenv

    load_dotenv()
    TOKEN = os.getenv('DISCORD_TOKEN')
    GUILD = os.getenv('DISCORD_GUILD')
    
    client = discord.Client()

    @client.event
    async def on_ready():
        guild = discord.utils.get(client.guilds, name=GUILD)
        if guild is not None:
            channel = discord.utils.get(guild.text_channels, name=GUILD)
    # when the lines 18-20 are used, line 26 throws an object type error 'none'
    # when lines 23-25 are used, there is no error
    #    for guild in client.guilds:
    #        if guild.name == GUILD:
    #            break
        print(
            f'{client.user} is connected to the following guild:\n'
            f'{guild.name}(id: {guild.id})'
        )
        
        members = '\n - '.join([member.name for member in guild.members])
        print(f'{guild.name}:\n - {members}')
    
    client.run(TOKEN)

1 Ответ

0 голосов
/ 06 августа 2020

Если я правильно понимаю, вы сначала пытаетесь распечатать информацию о гильдии в функции on_ready, верно?

Вы можете сделать это так:

client = discord.Client()
@client.event
async def on_ready():
     for guild in client.guilds:
         print(
          f'{client.user} is connected to the following guild:\n'
          f'{guild.name}(id: {guild.id})'
         )
     members = '\n - '.join([member.name for member in guild.members])
     print(f'Guild Members:\n - {members}')

Наконец:

client.run(TOKEN)
...