栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何与discord.py一起使用嵌齿轮?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何与discord.py一起使用嵌齿轮?

注意:

下面是针对较旧的0.16版本编写的,该版本没有很好的齿轮文档。新的1.0版本有很好的文档,并且完全改变了齿轮的结构。如果您使用的是最新版本的discord.py,则应查阅官方文档。

介绍

每个齿轮都有两个部分:一个类和一个

setup
函数。几乎所有
setup
功能看起来都一样:

def setup(bot):    bot.add_cog(Cog(bot))

Cog
齿轮类在哪里。

cog类包含我们所有的命令和事件作为方法。

主要变化

将机器人更改为齿轮需要完成四个主要的转换:

  1. 替换

    bot.command
    commands.command
    commands
    from discord.ext import commands

  2. 更改函数的签名以使其包含

    self
    在开头,因为所有命令和事件现在都是cog类的方法

  3. 更改所有引用

    bot
    来引用
    self.bot
    ,而不是

  4. 卸下所有

    bot.event
    装饰器。来自您齿轮的事件侦听器仅以名称注册

还有一些陷阱:

  1. await bot.process_commands(message)
    on_message
    您的齿轮中的任何事件中删除。对于任何消息,只应等待一次。默认值
    on_message
    已为您完成此操作。

  2. 通过齿轮注册事件不会从您的主文件或其他齿轮中删除与该事件相关的其他回调。这意味着,

    on_member_join
    例如,如果您在多个地方定义了该事件的行为,则您的机器人可以多次响应该事件。

假设您

bot.py
在目录中具有以下discord.py机器人
src

from discord.ext import commandsbot = commands.Bot(command_prefix='!')@bot.command(pass_context=True)@commands.has_role("Mod")async def acommand(ctx, argument):   await bot.say("Stuff")@bot.eventasync def on_message(message):    print(message.content)    await bot.process_commands(message)bot.run("token")

然后,您将该功能分解为齿轮

src/cogs/maincog.py

from discord.ext import commandsclass 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))

您的

bot.py
文件看起来像

from discord.ext import commandsbot = commands.Bot(command_prefix='!')bot.load_extension("cogs.maincog")bot.run("token")

请注意,要使用加载扩展

cogs/maincog.py
,请使用
load_extension("cogs.maincog")

其它功能

嵌齿轮还允许您定义一些特殊方法。其中大多数仅在discord.py-
rewrite
中可用,并在此处记录。

  1. __global_check
    ,以前
    __check
    是在每个命令之前运行的,必须返回
    True
    才能继续执行该命令。

  2. __local_check
    仅在此齿轮发出的命令之前运行。

  3. __global_check_once
    我相信这类似于,
    __global_check
    除了在子命令的情况下仅检查一次。我没有用太多。

  4. __unload
    您可以通过卸载扩展程序,然后重新加载它来实时刷新您的机器人,使您无需离开机器人就可以更新齿轮。当您卸载扩展程序时,或者当您的机器人停止运行时(如果需要进行清理),将调用此方法。

  5. __before_invoke
    __after_invoke
    分别在此齿轮的每个命令之前和之后运行。

  6. __error
    是此齿轮的命令的错误处理程序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号