我无法使用 discord.py 向我的 discord 机器人添加命令
Posted
技术标签:
【中文标题】我无法使用 discord.py 向我的 discord 机器人添加命令【英文标题】:I can't add commands to my discord bot with discord.py 【发布时间】:2018-12-01 12:36:54 【问题描述】:这是我的代码:
from discord.ext import commands
import discord
import config
class Bot(commands.AutoShardedBot):
def __init__(self):
super().__init__(command_prefix="~")
@commands.command()
async def test(self, ctx):
await ctx.send("some random text")
def run(self):
super().run(config.TOKEN)
if __name__ == "__main__":
bot = Bot()
bot.run()
所以现在,当我输入~test
时,它应该以some random text
响应,但终端中却弹出了这条错误消息:
Ignoring exception in command None:
discord.ext.commands.errors.CommandNotFound: Command "test" is not found
我看不出我做错了什么。
【问题讨论】:
【参考方案1】:Discord.py 目前无法自动注册来自Client
子类的命令,这些子类由@commands.command()
修饰。但是,您仍然可以手动将它们添加到 __init__
或任何将要运行的位置:
class Bot(commands.AutoShardedBot):
def __init__(self):
super().__init__(command_prefix="~")
self.add_command(commands.Command("test", self.test))
# or uglier:
self.command()(self.test)
async def test(self, ctx):
await ctx.send("some random text")
如果你愿意,你仍然可以使用装饰器(我更喜欢这种方式,因为它更简单):
class Bot(commands.AutoShardedBot):
def __init__(self):
super().__init__(command_prefix="~")
self.add_command(self.test)
@commands.command()
async def test(self, ctx):
await ctx.send("some random text")
如果您将有很多初始命令并且懒得为每个命令调用add_command
,您可以执行以下操作:
import inspect
class Bot(commands.AutoShardedBot):
def __init__(self):
super().__init__(command_prefix="~")
members = inspect.getmembers(self)
for name, member in members:
if isinstance(member, commands.Command):
if member.parent is None:
self.add_command(member)
@commands.command()
async def test(self, ctx):
await ctx.send("some random text")
@commands.command()
async def test2(self, ctx):
await ctx.send("some random text2")
@commands.command()
async def test3(self, ctx):
await ctx.send("some random text3")
【讨论】:
api 可能会发生变化,因为Command.__init__
的答案现在只使用一个参数:func 和 kwargs。所以在第一个例子中是self.add_command(commands.Command(self.test, name="test"))
而不是self.add_command(commands.Command("test", self.test))
【参考方案2】:
尝试做:
main.py
import discord
import os
client = discord.Client
@client.event
async def on_message(message):
if message.content.startswith("!hello")
await message.channel.send("hello!")
client.run(os.getenv("TOKEN"))
.env
TOKEN=paste your token here
【讨论】:
以上是关于我无法使用 discord.py 向我的 discord 机器人添加命令的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 discord.py 使用我的不和谐机器人编辑嵌入颜色
Discord.py 机器人:如何让我的不和谐机器人向我发送对用户在 DM 中使用的命令的响应,例如进行调查?
Discord.py bot - 如何让机器人在 DM 中向我发送用户的消息?