我正在使用python 3.5的扩展程序,使其能够使用Discord API与聊天机器人进行通信。
扩展程序为python添加了一些对象,包括Channel对象,它保存了一个通道的唯一ID。
在这段代码中;
async def on_message(message):
if message.author==bot.user or message.channel!=CHANNEL:
print("Either not replying to myself, or recieved message from the wrong channel; '"+string(message.channel)+"' when I was expecting '"+(CHANNEL)+"'...")
return
对于某些上下文,CHANNEL
是一个常量,设置为我希望机器人与之交互的目标通道,bot
是与服务器的连接,bot.user
是一个包含聊天机器人ID的成员对象。
if语句工作正常,但在将message.channel转换为字符串时,会显示以下错误; TypeError: 'module' object is not callable
。这是为什么?
我可以提供更多详细信息,如果这没有意义,API参考也是here。
编辑:提供更多背景信息。
答案 0 :(得分:0)
您的代码中可能有import string
之类的语句,然后您正在尝试string(message.channel)
,这是引发此异常的地方,因为您无法调用模块string
一个功能。
以下是一个例子:
>>> import string
>>> string('hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
在您的代码中,通过格式化您的消息来尝试更简单的事情:
msg = "Either not replying to myself, or received message from the wrong channel; '{}' when I was expecting '{}'..."
print(msg.format(message.channel, CHANNEL))
答案 1 :(得分:0)
我找到了答案,这仅适用于使用discord.py;
的人原来,Channel变量不能直接相互比较;我不得不使用message.channel.id != CHANNEL.id
来让事情变得更好。