python - Python 类自变量未转移到函数 (discord.py)
问题描述
在这段代码中on_raw_reaction_add()
得到self.server
了,None
但on_raw_reaction_remove()
它确实得到了我在__init__()
. 简单的解决方案是在该函数内执行相同的操作,但我想了解为什么它不像我所知的那样工作。
编辑:试过self.client.server_id
也没有用
on_raw_reaction_remove()
编辑二:正如我之前所说,它在任何一个都不起作用
编辑三:找出原因。该机器人在调用时尚未运行,因此
get_guild
是None
. 呃。
class reactionsCog(commands.Cog):
def __init__(self, client):
self.client = client
self.server = self.client.get_guild(client.server_id)
@commands.Cog.listener()
async def on_raw_reaction_add(self, reaction):
#Private events
for i in range(2):
if reaction.message_id == self.client.pri_message[i].id:
print('Someone reacted to pri_message ', i, ' with ', str(reaction.emoji))
if str(reaction.emoji) == '✅':
if reaction.user_id != self.client.user.id:
member = self.server.get_member(reaction.user_id)
userstr = member.display_name
if userstr in self.client.pri_not_sure[i]:
await self.client.pri_message[i].remove_reaction('❔', member)
self.client.pri_attending[i].append(userstr)
try:
await self.client.pri_message[i].remove_reaction('❌', member)
except:
pass
print(member.name, ' added to pri_attending ', i)
@commands.Cog.listener()
async def on_raw_reaction_remove(self, reaction):
#Private events
for i in range(2):
if reaction.message_id == self.client.pri_message[i].id:
if str(reaction.emoji) == '✅':
member = self.server.get_member(reaction.user_id)
print(member.name, ' removed from pri_attending ', i)
userstr = member.display_name
self.client.pri_attending[i].remove(userstr)
解决方案
正如您所发现的,这是因为get_guild
在机器人连接到不和谐 API 服务之前被调用。on_ready
您可以通过包含一个在机器人连接时触发的事件来解决此问题:
class reactionsCog(commands.Cog):
def __init__(self, client):
self.client = client
@commands.Cog.listener()
async def on_ready(self):
await self.client.wait_until_ready()
self.server = self.client.get_guild(client.server_id)
...
推荐阅读
- ios - 如何在 Swift 的子视图中访问 UITextfield?
- php - 如何在 php 中将 pdf 文件显示为可从 mysql 的 BLOB 类型下载的文件?
- javascript - 从下拉列表中选择选项时反应警告
- google-sheets - 如何不计算不包含文本的工作表中的单元格?
- fortran - 在 Fortran 中删除
- python - 无法让 python-can-viewer 运行
- three.js - ThreeJS:如何将一个对象的旋转克隆到另一个对象
- c# - 使用 C# 中的存储过程输出参数获取列值
- php - 如果我们的应用程序位于反向代理后面,如何获取访问者的真实 IP?
- python - 如何在“r”原始字符串中包含变量