Ana*_*ius 0 python bots discord discord.py
我写了一个相当大的不和谐机器人。它具有超过1000行代码。当我研究如何在youtube和此处进行操作时,似乎没有任何效果。我想知道是否有人可以通过照片示例解释如何正确使用玉米棒。我可以显示我需要哪些代码来帮助您了解我想要什么。
一个例子是我想将所有的mod命令放在一个单独的文件中,以使其更加整洁有序。那么,我该怎么做呢?这是我的代码示例:
我不确定如何完全启动齿轮,还有什么要导入的,如何调用文件。我非常了解Java,但是我正在尝试与Discord一起从事Python技能的研究。先感谢您!
下面是针对较旧的0.16版本编写的,该版本没有很好的齿轮文档。新的1.0版本有很好的文档,并且完全改变了齿轮的结构。如果您使用的是最新版本的discord.py,则应查阅官方文档。
每个齿轮都有两个部分:一个类和一个setup函数。几乎所有setup功能看起来都一样:
def setup(bot):
bot.add_cog(Cog(bot))
Run Code Online (Sandbox Code Playgroud)
Cog齿轮类在哪里。
cog类包含我们所有的命令和事件作为方法。
您需要执行以下四个主要转换,才能将机器人更改为齿轮:
替换bot.command为commands.command(commands被from discord.ext import commands)
更改函数的签名以使其包含self在开头,因为所有命令和事件现在都是cog类的方法
更改所有引用bot来引用self.bot,而不是
卸下所有bot.event装饰器。来自您齿轮的事件侦听器仅以名称注册
还有一些陷阱:
await bot.process_commands(message)从on_message您的齿轮中的任何事件中删除。对于任何消息,只应等待一次。默认值on_message已为您完成此操作。
通过齿轮注册事件不会从您的主文件或其他齿轮中删除与该事件相关的其他回调。这意味着,on_member_join例如,如果您在多个地方定义了该事件的行为,则您的机器人可以多次响应该事件。
假设您bot.py在目录中具有以下discord.py机器人src:
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
@bot.command(pass_context=True)
@commands.has_role("Mod")
async def acommand(ctx, argument):
await bot.say("Stuff")
@bot.event
async def on_message(message):
print(message.content)
await bot.process_commands(message)
bot.run("token")
Run Code Online (Sandbox Code Playgroud)
然后,您将该功能分解为齿轮 src/cogs/maincog.py
from discord.ext import commands
class MainCog:
def __init__(self, bot):
self.bot = bot
@commands.command(pass_context=True)
@commands.has_role("Mod")
async def acommand(self, ctx, argument):
await self.bot.say("Stuff")
async def on_message(self, message):
print(message.content)
def setup(bot):
bot.add_cog(MainCog(bot))
Run Code Online (Sandbox Code Playgroud)
您的bot.py文件看起来像
from discord.ext import commands
bot = commands.Bot(command_prefix='!')
bot.load_extension("cogs.maincog")
bot.run("token")
Run Code Online (Sandbox Code Playgroud)
请注意,要使用加载扩展cogs/maincog.py,请使用load_extension("cogs.maincog")。
嵌齿轮还允许您定义一些特殊方法。其中大多数仅在discord.py-rewrite中可用,并在此处记录。
__global_check,以前__check是在每个命令之前运行的,必须返回True才能继续执行该命令。
__local_check 仅在此齿轮发出的命令之前运行。
__global_check_once我相信,这与__global_check子命令类似,只是它在子命令的情况下仅检查一次。我没有用太多。
__unload您可以通过卸载扩展程序,然后重新加载它来实时刷新您的机器人,使您无需离开机器人就可以更新齿轮。当您卸载扩展程序时,或者在您的机器人停止运行时(如果需要进行清理),将调用此方法。
__before_invoke和__after_invoke分别在此齿轮的每个命令之前和之后运行。
__error 是来自此齿轮的命令的错误处理程序。
| 归档时间: |
|
| 查看次数: |
5931 次 |
| 最近记录: |