Discord Bot Client.User 在 Python 中转换为 Discord.Utils 时出错
Posted
技术标签:
【中文标题】Discord Bot Client.User 在 Python 中转换为 Discord.Utils 时出错【英文标题】:Discord Bot Client.User Error Converting to Discord.Utils in Python 【发布时间】:2020-11-26 06:32:14 【问题描述】:python 3.7.3 不和谐.py 1.3.4 树莓派 4
在一切正常之后,我一开始就卡住了。
我从头开始。当我使用 for 循环后跟 print(f'client.user
时,我没有任何问题,机器人用户名会打印到终端。当我放弃循环并使用guild = discord.utils.get(client.guilds, name=GUILD)
代码时,我在终端中收到以下错误。
忽略 on_ready 中的异常 回溯(最近一次通话最后): _run_event 中的文件“/home/pi/.local/lib/python3.7/site-packages/discord/client.py”,第 312 行 等待 coro(*args, **kwargs) 文件“/home/pi/TackleBot/bot2.py”,第 27 行,on_ready f'client.user 连接到以下公会:\n' AttributeError: 'NoneType' 对象没有属性 'name'
如果我在guild = discord.utils.get
命令之后直接添加print(client.user)
命令,它将在那里打印用户名,但仍然在下面出错。我花了几个小时梳理文档,这就是我现在所处的位置。还是一头雾水。如果我注释掉 for 循环,我会收到错误消息。如果我注释掉 discord 实用程序命令,它工作正常。永远不要使用 print(f'client.user
块更改任何内容。
我边走边学,非常感谢任何帮助或建议。谢谢!
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)
【问题讨论】:
请在收到错误时发布完整的回溯。 你不能恢复你的提交(例如使用git bisect
)来找到你破坏代码的地方吗?如果您甚至不使用 git 之类的东西,我强烈建议您将其列入您的学习清单。另外,作为这里的新用户,请使用tour 并阅读How to Ask。
抱歉,我已经添加了完整的回溯。
我现在也在学习 git,对于这个问题,它与第一个代码块是隔离的,我可以通过不使用 'guild = discord.utils.get' 行让它消失。试图理解为什么会出错,这让我发疯了。
【参考方案1】:
如果我理解正确,您是在尝试先在 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)
【讨论】:
谢谢你,Costa,是的,目的是确保机器人连接到正确的公会,并通过在终端打印机器人用户名和公会信息来确认。为了“清理”我的代码,我想用不和谐的实用函数 get 替换 for 循环。出于某种原因,当我这样做时,它会在 print client.user 代码行出错。啊。再次感谢您! 原来如此,我只是回到使用@client.event 方法,而不是作为新手尝试使用它 lol 再次感谢您的帮助。以上是关于Discord Bot Client.User 在 Python 中转换为 Discord.Utils 时出错的主要内容,如果未能解决你的问题,请参考以下文章
类型错误:不是 NODE JS DIScord Bot 中的函数 [关闭]
client.get_user() 在 discord.py 中不起作用
如何使用 Discord.py 重写更改机器人用户名/头像?