如何制作多个文件 Python Bot

Posted

技术标签:

【中文标题】如何制作多个文件 Python Bot【英文标题】:How to make multiple files Python Bot 【发布时间】:2018-11-13 15:52:25 【问题描述】:

如何从多个文件中加载命令 Python Bot 下面是我的 main.py 和其他带有命令的 python 文件。这是正确的方法还是我需要改变什么?我需要在所有文件中添加tokenprefixbot = commands.Botbot.run(token) 等。

ma​​in.py

token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
prefix = "?"

import discord
from discord.ext import commands
startup_extensions = ["second", "third"]

bot = commands.Bot(command_prefix=prefix)
bot.remove_command("help")

@bot.event
async def on_ready():
    print('Logged in as')
    print(bot.user.name)
    print(bot.user.id)
    print('------')

@bot.command(pass_context=True)
async def hello1(ctx):
    msg = 'Hello 0.author.mention'.format(ctx.message)
    await bot.say(msg)

bot.run(token)

second.py

import discord
from discord.ext import commands

class Second():
def __init__(self, bot):
    self.bot = bot

@commands.command(pass_context=True)
async def hello2(ctx):
    msg = 'Hello0.author.mention'.format(ctx.message)
    await bot.say(msg)

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

third.py

import discord
from discord.ext import commands

class Third():
def __init__(self, bot):
    self.bot = bot

@commands.command(pass_context=True)
async def hello3(ctx):
    msg = 'Hello0.author.mention'.format(ctx.message)
    await bot.say(msg)

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

【问题讨论】:

discord.py 具有“cogs”的概念,即您的机器人可以加载的命令、事件等组。见this example。你用的是什么版本的discord.py @PatrickHaugh 我使用的是 0.16.12 版本。 那你应该看看this example。 您在 cog 中对 bot 的所有剩余引用都应更改为 self.bot 不,这里的__main__ 指的是the main script being run in the interpreter,而不是main.py 文件。我会按原样使用该代码。 【参考方案1】:

你能做的是用 cogs 设置你的文件,例如你的主文件:

import discord
from discord.ext import commands

client = commands.Bot(command_prefix="!") # <- Choose your prefix


# Put all of your cog files in here like 'moderation_commands'
# If you have a folder called 'commands' for example you could do #'commands.moderation_commands'
cog_files = ['commands.moderation_commands']

for cog_file in cog_files: # Cycle through the files in array
    client.load_extension(cog_file) # Load the file
    print("%s has loaded." % cog_file) # Print a success message.

client.run(token) # Run the bot.

在你的 moderation_commands 文件中说它看起来像:

import discord
from discord.ext import commands

class ModerationCommands(commands.Cog):
    def __init__(self, client):
        self.client = client
    @commands.command(name="kick") # Your command decorator.
    async def my_kick_command(self, ctx) # ctx is a representation of the 
        # command. Like await ctx.send("") Sends a message in the channel
        # Or like ctx.author.id <- The authors ID
        pass # <- Your command code here

def setup(client) # Must have a setup function
    client.add_cog(ModerationCommands(client)) # Add the class to the cog.

您可以在此处找到有关 cogs 的更多信息:https://discordpy.readthedocs.io/en/stable/ext/commands/cogs.html

【讨论】:

以上是关于如何制作多个文件 Python Bot的主要内容,如果未能解决你的问题,请参考以下文章

discord.py bot 正确构建在 heroku 上,但显示脱机

由 bot 制作的 webhook url 不可复制

尝试为 Discord bot 提供多个命令文件

如何保持 python 3 脚本(Bot)运行

python--制作微信好友照片墙

如何制作随机反应游戏(discord.py)