为啥这不适用于我的 Discord 机器人?
Posted
技术标签:
【中文标题】为啥这不适用于我的 Discord 机器人?【英文标题】:Why is this not working for my Discord bot?为什么这不适用于我的 Discord 机器人? 【发布时间】:2021-12-12 08:11:55 【问题描述】:我目前正在为我主持的服务器开发 Discord 机器人(并希望最终加入我们运行的项目的开发团队)。当我的代码看起来像这样时,它工作得很好:
import discord
import os
client = discord.Client()
@client.event
async def on_ready():
print('We have logged in as 0.user'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('!hello'):
await message.channel.send('Hello!')
但是我遇到了一个问题,那就是该命令区分大小写并允许任何内容跟随该命令。我尝试按照我在另一篇文章中找到的内容进行操作,并提出了以下建议:
import discord
import os
client = discord.Client()
@client.event
async def on_ready():
print('We have logged in as 0.user'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.lower == "!hello":
await message.channel.send("Hello!")
现在我这样做了,该命令不起作用。问题是字符串中的感叹号吗?这是我最好的猜测,但我知道什么?如果有一种方法可以更轻松地实现更多命令,我愿意重新开始代码,因为我还没有实现很多命令,但我需要在未来添加更多。如果这是一种相对简单的方法,同时做我想做的事情(响应开头有感叹号的命令,字母顺序正确,没有多余的字母,不注意大小写,用一条简单的消息)然后简单地解决此方法不起作用的问题是可以接受的。
【问题讨论】:
lower
是一种方法。你想用lower()
调用它。 (在调试此类问题时,请尝试打印有问题的变量以查看它们的值是否符合您的预期。)此外,请查看commands 模块,以更轻松地实现前缀命令。请参阅this question 关于不区分大小写的信息。
【参考方案1】:
正如 CrazyChucky 所说,您想要的是 lower()
。关于命令的评论可能会对您有所帮助。如果您想使用命令实现相同的目的,它看起来像这样:
import discord
import os
from discord.ext import commands
client = commands.Bot(command_prefix='!')
@client.event
async def on_ready():
print('We have logged in as 0.user'.format(client))
@client.command()
async def hello(ctx):
await ctx.send("Hello!")
这样您就可以预先定义所有命令都以!
开头,并且您可以轻松设置更多命令。而不是消息,您有一些称为 context 或 ctx
的东西,因为它总是被引用。 ctx.send
与写 ctx.channel.send
相同,因此您可以看到它与您之前使用的 message
之间的相似之处。
你提到你不想让任何人在命令之后写任何东西。这也实现了这一点,但是,如果您在任何时候想要有人跟进命令并提供一些附加信息,添加它很容易。只需将第二个参数添加到以后可以访问的函数中:
@client.command()
async def hello(ctx, args):
await ctx.send(args)
如果用户随后使用 !hello world
调用命令,机器人会将 world
发送回频道。
【讨论】:
【参考方案2】:lower
是一种方法。所以如果你想使用它,你应该使用lower()
。所以你的代码应该是这样的:
import discord
import os
client = discord.Client()
@client.event
async def on_ready():
print('We have logged in as 0.user'.format(client))
@client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.lower() == "!hello":
await message.channel.send("Hello!")
希望这会有所帮助:))
【讨论】:
以上是关于为啥这不适用于我的 Discord 机器人?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 discord.js 机器人没有响应“;say (content)”
为啥我的 discord.py 机器人在 Heroku 上托管时没有声音?
为啥这个 Embed.set_footer 调用在我的 Discord 机器人中失败?
为啥我的 discord.py 机器人不响应 on_message 事件?