今天我要教大家使用 Replit(Python) 製作 Discord bot
这篇教学和另一篇教学有点不同,上次的程式码是普通架构,而这次的程式码是使用Cog架构
Cog架构可以方便管理每一个功能,也比较方便维护程式码
并且可以再不用重启机器人的情况载入功能
机器人设置
首先到Discord 开发网站点下右上角的New Application
输入你想要的机器人名称(名称不要包含Discord),记得勾选同意条款后再按下创建
点选左边的bot,到底下将Privileged Gateway Intents 的三个选项打开
然后按下紫色的Reset Token按钮并複製Token(Token很重要不能告诉别人,也不行上传到GitHub,会被官方扫描到并重置Token,可以找个自己的地方记录下来)
接着找到OAuth2的URL Generator
上下两区选项分别勾选bot和Administrator,最后複製底下的网址到浏览器贴上
进到贴上的网址,选好想要的伺服器后点选继续并授权将机器人加入伺服器
接着进入伺服器检查机器人是否成功进入
下一步就是要让机器人上线了!
前置作业
如果不想后面麻含的设定可以按下右边绿色的按钮直接用我的模板製作
※如果使用我的模板,基本程式码编写和环境安装可以跳过,但还是要设定Secrets储存token
自行建档
1.到Replit注册并登入帐号
2.点下左上角的Create Repl,选择Python并在Title输入自订名称,最后按下蓝色的Create Repl按钮
基本程式码编写
在main.py输入以下程式码
import discordimport osfrom pathlib import Pathbot = discord.Bot(intents=discord.Intents.all())for cog in [p.stem for p in Path("cog").glob("*.py")]: bot.load_extension(f'cog.{cog}') print(f'Loaded {cog}.')print('Done.')@bot.eventasync def on_ready(): print(f"「{bot.user}」已登入")@bot.command()#重新载入Cogasync def reload(ctx, cog): bot.reload_extension(f'cog.{cog}') print(f'Loaded {cog}.') await ctx.respond(f'{cog} reloaded successfully.')bot.run(os.environ['bot_token']) #运行机器人
然后按下第一次执行
使用Secrets储存token
因为拥有token的人就可以操控机器人
而Repl.it的程式码是网路上所有人都能查看的
来到左下角点选Secrets
按下New Secret
创建一个名为bot_token的Key
Value为前面複製的token
环境安装(此部分顺序很重要)
接下来到左下角点选Packages
在右边的搜寻栏打入py-cord并找到下面图片红框的选项按下Install
在右边的搜寻栏打入discord2并找到下面图片红框的选项按下Install(discord2一定要最后安装)
按下第二次执行后你就可以看到机器人已经上线了
如果产生错误只需将discord2删除后再重新安装即可
Cog程式码编写
Cog架构和普通架构不太一样,要依底下表格的变化编写
import discordfrom discord.ext import tasks, commandsbot = discord.Bot(intents=discord.Intents.all())class 档名(commands.Cog): #需替换档名为自己的名称 def __init__(self, bot): self.bot = bot @commands.Cog.listener() @bot.slash_commanddef setup(bot): bot.add_cog(档名(bot)) #需替换档名为自己的名称
建立一个名为cog的资料夹
在里面创建一个Python(.py)档
讯息侦测
import discordfrom discord.ext import tasks, commandsbot = discord.Bot(intents=discord.Intents.all())class hi(commands.Cog): def __init__(self, bot): self.bot = bot @commands.Cog.listener() async def on_message(self, message): if message.author == bot.user: return if message.content == "hi": #如果有讯息为"hi" await message.channel.send("hello!") #在此频道发送"hello!"def setup(bot): bot.add_cog(hi(bot)) bot.add_cog(hi(bot))
斜线指令
简单回覆讯息练习
import discordfrom discord.ext import commandsbot = discord.Bot(intents=discord.Intents.all())class hello(commands.Cog): def __init__(self, bot): self.bot = bot @bot.command(description="回复world") #定义为slash_command,description为备注(也可不放) async def hello(self,ctx): #指令名称为"hello" 并调用ctx await ctx.respond("world") #回复"world" def setup(bot): bot.add_cog(hello(bot))
这里有很多设定是和上一篇一模一样,很多教学都省略了,所以可以过去看一下→传送门
这次的教学就到这边
非常感谢OsGa提供教学,以上部份程式由OsGa提供
有问题也可以直接留言讯问
喜欢话可以帮忙按个Like帮我加个油喔!!!