使用 Replit(Python) 製作 Discord bot -Cog

今天我要教大家使用 Replit(Python) 製作 Discord bot

这篇教学和另一篇教学有点不同,上次的程式码是普通架构,而这次的程式码是使用Cog架构

Cog架构可以方便管理每一个功能,也比较方便维护程式码

并且可以再不用重启机器人的情况载入功能

机器人设置

首先到Discord 开发网站点下右上角的New Application
http://img2.58codes.com/2024/20161576ODdmvASILS.jpg
输入你想要的机器人名称(名称不要包含Discord),记得勾选同意条款后再按下创建
http://img2.58codes.com/2024/20161576GK4Mjc5onK.jpg
点选左边的bot,到底下将Privileged Gateway Intents 的三个选项打开
然后按下紫色的Reset Token按钮并複製Token(Token很重要不能告诉别人,也不行上传到GitHub,会被官方扫描到并重置Token,可以找个自己的地方记录下来)
http://img2.58codes.com/2024/20161576e1q1IKTJkl.jpg
接着找到OAuth2的URL Generator
上下两区选项分别勾选bot和Administrator,最后複製底下的网址到浏览器贴上
http://img2.58codes.com/2024/20161576Y9dyXrgLLf.jpg
进到贴上的网址,选好想要的伺服器后点选继续并授权将机器人加入伺服器
http://img2.58codes.com/2024/20161576ECHSOPqdhF.png
接着进入伺服器检查机器人是否成功进入
http://img2.58codes.com/2024/20161576Sgsvi4whlk.png
下一步就是要让机器人上线了!

前置作业

如果不想后面麻含的设定可以按下右边绿色的按钮直接用我的模板製作

※如果使用我的模板,基本程式码编写和环境安装可以跳过,但还是要设定Secrets储存token

自行建档

1.到Replit注册并登入帐号
2.点下左上角的Create Repl,选择Python并在Title输入自订名称,最后按下蓝色的Create Repl按钮
http://img2.58codes.com/2024/201615762r1flF7AwB.jpg
http://img2.58codes.com/2024/20161576AXvE7pvBEI.jpg

基本程式码编写

在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
http://img2.58codes.com/2024/20161576HLbw7W4VY0.png

环境安装(此部分顺序很重要)

接下来到左下角点选Packages
http://img2.58codes.com/2024/20161576DFqDNRdUe8.jpg
在右边的搜寻栏打入py-cord并找到下面图片红框的选项按下Install
http://img2.58codes.com/2024/20161576zrMZF45kYg.jpg
在右边的搜寻栏打入discord2并找到下面图片红框的选项按下Install(discord2一定要最后安装)
http://img2.58codes.com/2024/20161576UNzfkxiPy5.jpg
按下第二次执行后你就可以看到机器人已经上线了
如果产生错误只需将discord2删除后再重新安装即可
http://img2.58codes.com/2024/2016157657vkhpLsfr.png

Cog程式码编写

Cog架构和普通架构不太一样,要依底下表格的变化编写

指令(command)事件(event)main.py@bot.command()@bot.eventCog@bot.slash_command@commands.Cog.listener()
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)档
http://img2.58codes.com/2024/20161576U7n9KWVXRl.png

讯息侦测

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帮我加个油喔!!!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章