0

我正在使用 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 参考也在这里

编辑:提供了更多的上下文。

4

2 回答 2

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))
于 2016-10-24T04:54:22.657 回答
0

我找到了答案,这只适用于使用 discord.py 的人;

事实证明,Channel 变量不能直接相互比较;我不得不用它message.channel.id != CHANNEL.id来让事情变得更好。

于 2016-10-24T05:06:46.300 回答