如何将整数与机器人读取的不和谐频道中的消息进行比较?

Posted

技术标签:

【中文标题】如何将整数与机器人读取的不和谐频道中的消息进行比较?【英文标题】:How do I compare an integer with a message in a discord channel read by a bot? 【发布时间】:2019-06-28 15:33:02 【问题描述】:

所以我正在制作一个非常简单的机器人,我需要在服务器中使用它。它的工作真的很简单。 为了更好地理解我需要什么:我有一个频道,人们必须在其中猜测 1 到 50000 之间的某个数字。如果他们猜到了,他们就赢了,机器人会宣布这一点。 我需要的是机器人检查每条消息,如果它不是 1 到 50000 之间的数字,它会删除消息。

目前这就是我所拥有的。我尝试了很多事情,比如尝试将“消息”转换为整数,但它不会让我这样做。

@client.event
    async def on_message(message):
        if(message.channel.id == "492772765737156628"):
            if message.content > 50000:
                await client.delete_message(message)

我对编码非常陌生,尤其是在 python 中,并且只知道一些基础知识。我感谢我得到的每一个答案和帮助:)

【问题讨论】:

“它不允许我将消息转换为整数”到底是什么意思?它会返回意外的东西、抛出错误还是其他? @DWuest 我尝试将 message = int(message) 放在 async def on_message(message) 之后。它给我一个错误 TypeError: int() argument must be a string, a bytes-like object or a number, not 'Message' 您不能对消息本身调用 int,因为它是“消息”类的一个实例。请改用val = int(message.content) 但是,在你这样做之前,首先检查你是否可以将它转换为整数,因为如果消息只是类似'abc' 的东西,程序会抛出错误。 在尝试输入 val = int(message.content) 之后,它却抛出了我 TypeError: '>' not supported between 'str' and 'int' 所以我想我做了一些事情错误或没有正确转换。 【参考方案1】:

您希望 message.content(一个字符串)作为一个整数,而不是 message(一个包含大量其他数据的 Message 对象)。

message.content的值有3种可能:

    非整数文本 整数文本 > 50000 整数文本

你可以测试所有这些

@client.event
async def on_message(message):
    if(message.channel.id == "492772765737156628"):
        try:
            content = int(message.content)
            if content > 50000:
                await client.delete_message(message)
        except ValueError:
            await client.delete_message(message)  # not an integer

【讨论】:

以上是关于如何将整数与机器人读取的不和谐频道中的消息进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除我的不和谐机器人在特定频道中发送的先前消息?

如何使用 dhooks 查找频道中发送的最新消息

如何使用不和谐机器人从不和谐频道随机发布文本?

阻止某些消息的不和谐机器人

如何使不和谐机器人将消息发送到不和谐 Node js 的特定频道机器人

如何修剪没有特定角色的不和谐用户?