首页 文章

如何导入discord bot对象以便在其他模块中使用

提问于
浏览
0

我试图减少我的discord bot的主文件中的行数,所以我创建了一个模块来处理某些命令,问题是我必须将bot对象传递给模块中主文件外的每个函数,这个增加我传递给每个函数的变量数量,它变得非常混乱 .

在下面的示例中,KsBot.py是我的主要bot文件,BasicCommand.py是我编写简单命令并将其导入KsBot.py以供使用的地方,KsBot是bot对象

在KsBot.py中:

if message.content.startswith("//ping"):
    await BasicCommand.ping(KsBot,message.channel)

在BasicCommand.py中:

async def ping(bot,channel):
    KsBot = bot
    await KsBot.send_message(channel,"pong")

我想在BasicCommand.py中添加一个变量来表示KsBot,所以我不必在每个函数中传递bot对象,我已经尝试将bot对象本身导入BasicCommand.py中,将其添加到顶部代码:

from KsBot import KsBot

但它给我一个错误说:

ImportError:无法导入名称'KsBot'

有人可以向我解释为什么会发生此错误,以及是否有任何方法可以传递此bot对象 . 我是编程和discord.py的新手,所以任何其他建议也值得赞赏,谢谢:D

1 回答

  • 0

    一个好的discord.py机器人不会手动调用 on_message 的所有命令,你应该使用 @bot.command(pass_context=True) 来添加一个命令 .

    摆脱 def on_message(...): 因为你没有做任何有意义的事情 .

    一个文件中的粗糙结构(不分裂):

    from discord.ext import commands
    
    bot = commands.Bot('//')
    
    @bot.command(pass_context=True)
    async def ping(ctx):
        channel = ctx.message.channel
        await bot.send_message(channel, "pong")
    
    bot.run("TOKEN")
    

    就这么简单!


    现在,多个拆分成多个文件,最简单的方法是定义自己的 builtins.bot . 或者,您可以在第二个文件中使用 def setup(bot): 查看 bot.load_extension("filename") . 两者都是有效的方法,但后者最适合使用齿轮 .

    以下示例适用于第一种方法:

    # ksbot.py
    from discord.ext import commands
    import builtins
    
    bot = commands.Bot('//')
    builtins.bot = bot
    
    import basiccommand
    
    @bot.command(pass_context=True)
    async def ping(ctx):
        channel = ctx.message.channel
        await bot.send_message(channel, "pong")
    
    bot.run("TOKEN")
    
    
    # basiccommand.py
    
    from discord.ext import commands
    from builtins import bot
    
    @bot.command(pass_context=True)
    async def hello(ctx):
        channel = ctx.message.channel
        await bot.send_message(channel, "hi")
    

    现在你有两个命令ping,发送“pong”,hello发送“hi” .

    如果必须添加 on_message 句柄,请确保在 on_message 末尾添加 bot.process_commands(message) ,上面的示例不要求您拥有事件句柄 .

    附注:对于惯例,文件名应该是小写的 .

相关问题