快速上手Discord 机器人开发

12,557 阅读5分钟

最近创建了一个公众号:编程进阶录,记录一些自己学习过程当中的笔记和心得,欢迎大家关注

快速上手Discord 机器人开发

闲来无事,在接单群里找了个单,因为自己平时没事的时候也会接接外包的单子,顺便赚点外快,干好发现群里有个开发 Discord 机器人的单子,二话不说,直接接了,接下来就是慢慢的去找各种文档学习怎么开发了。接下来是我的一些学习的记录,如果有错误的地方,欢迎各位大佬指正。

可能有许多同学不知道 Discord 是个什么东西,在这里我和大家介绍一下,Discord 是一个国外的在线聊天室,就类似于国内的 YY语音、微信之类的聊天软件。

开发前的准备

这里开发之前,因为某些原因需要用到特殊的工具,这里我就不进行介绍啦。

discord官网地址:discord.com/

因为平时接触到的编程语言比较多,经过我的筛选,最后选择了使用 Python 来实现(这里直接踩了好多坑)

安装开发所需要的依赖

在正式开发之前,我们需要准备好自己的开发环境,Python 的话直接选择最新的即可,这里就不对 Python 的安装进行介绍啦,直接自行网上搜索即可。

安装 pycord 依赖

在不断踩坑的过程当中,我发现 pycord 这个库其实对 discord.py 进行了封装,更佳容易上手开发,并且文档也更佳的详细,所以直接无脑选择 pycord 即可。

安装命令

pip install py-cord

安装成功之后,就可以进行机器人的开发了。

创建机器人

1、登录到 Dicord 的开发者平台

网址:discord.com/developers/…

点击页面右上角的 New Application,输入你需要创建的机器人的名称,同意协议即可创建成功。

创建应用

创建成功好了应用之后,选择 Bot 选项卡,在应用程序当中创建我们自己的 bot

创建机器人

在下图所示的 Token 位置就可获得我们创建好的机器人的 Token。

获得机器的Token

在 Bot 选项卡的页面当中下拉可以给机器人选择不同的权限来计算权限值(permissions integer)。

创建服务器

到这里我们的机器人已经创建成功了,接下来我们将机器人添加到我们的 Server 当中去,这里我直接选择亲自创建

创建服务器

接下来回到刚刚的开发者平台,找到 OAuth2 选项卡,选择 URL Generator,这里我直接给机器人管理员的权限,选择如下所示:

给机器人授权

点击 Copy 按钮,将生成的授权链接复制到浏览器当中,就可以出现授权界面,如下所示,选择你自己创建的 server,点击继续即可:

授权机器人到自己的服务器

到这里为止,我们已经准备好了 Discord Bot 开发的基本条件,接下来就可以开始给我们的机器人开发有意思的功能了。

创建自己的第一个 discord 机器人

这里我直接给出代码,然后再解释每一行代码的含义吧

import discord

# 这里 proxy 根据你自己的需要进行填写,也可以不用填
bot = discord.Bot(proxy="http://127.0.0.1:7890", intents=discord.Intents.all())

@bot.event
async def on_ready():
  print("机器人上线了")
 

@bot.slash_command(name = "hi", description = "Say hello to the bot")
async def hello(ctx):
    await ctx.respond("Hey!")
    
bot.run('token') # 这里替换成你自己的 token

第一行代码当中,我们导入了我们之前自己安装的 discord 包,然后使用 discord 包当中的 Bot 对象实例化出来一个 bot 对象。

然后使用 bot 当中 event 装饰器来监听指定的实现,这里我使用的 on_ready 就是当机器人准备好了之后,就会触发响应的函数,这里我直接使用打印语句进行简单的打印。

随后便是使用 slash_command 装饰器来定义一条命令,slash_command 就是当用在与机器人的聊天对话框当中输入 / 时就会弹出命令供你来选择,其中 name 代表着命令的名称,description 代表对命令的一些解释说明,就如同下面的图片当中的一样。

命令展示

接下来就是伙伴们自己将自己需要实现的逻辑编写到函数当中即可。这里我简单的让机器人回复Hey

下面是实际效果的展示。

使用命令

OK,到这里可以说已经成功入门了 discord 机器人开发,你还可以组合各种库、数据库等等进行开发,原理其实和开发 Web 差不多,但是我认为他更佳有趣。

发送可以交互的消息

平时在开发网页的时候,我们可以通过各种按钮、输入框来和我们的应用程序交互,在 discord bot 的开发当中,同样的 discord 也提供了许多可以供开发者选择使用的交互组件,下面我演示一下常用的交互组件的使用方式。

发送按钮

和平常的网页开发一样,我们可以让我们的机器人给用户发送按钮,供用户选择操作,稍微修改一下我们的代码,如下所示:

import discord

# 这里 proxy 根据你自己的需要进行填写,也可以不用填
bot = discord.Bot(proxy="http://127.0.0.1:7890", intents=discord.Intents.all())


class TestView(discord.ui.View):
    def __init__(self):
        super().__init__()

    @discord.ui.button(label="点我")
    async def on_click(self, button: discord.ui.Button, interaction: discord.Interaction):
        await interaction.response.send_message("你点了我", ephemeral=True)


@bot.event
async def on_ready():
    print("机器人上线了")


@bot.slash_command(name="hi", description="Say hello to the bot")
async def hello(ctx):
    await ctx.respond("Hello!", view=TestView())

bot.run('token') # 这里替换成你自己的 token

上面的代码当中,我们定义了一个 TestView 的类继承于 discord.ui.View, 然后进行初始化,并且使用 @discord.ui.button 创建了一个文字为 点我 的按钮,通过给该按钮注册了一个事件回调,一旦用户点击我们的按钮时就会触发我们定义的回调按钮,回调函数的参数固定为上面上个,如果你需要进行参数传递,使用使用类的初始化机制实现,在构造器当中传入即可。

切换到 discord 到机器人聊天界面,使用 /hi 命令,可以发现机器人成功的给我们发送了一句话和一个 点我 的按钮,点击按钮之后机器人给我们响应了 你点了我 的消息。

发送按钮