Discord是 21 世纪最受欢迎的社交媒体平台之一,制作 Discord 机器人可能是最酷的 Python 项目之一。
使用Python的discord API和其他一些模块,我们可以轻松地为discord中的文本通道编写我们自己的机器人。在本教程中,我们将编写一个机器人,它会向我们发送有关不和谐的有趣消息。
让我们开始吧!
另请阅读:使用 spaCy NLP 库在 Python 中构建 ChatBot
在 Discord 中添加机器人的步骤
在开始使用 python 编码之前,我们需要从 Discord 开发人员门户创建一个 Discord 机器人帐户。点击此处直接进入网站。
- 单击左侧菜单中的“应用程序”。然后,单击“新建应用程序”按钮创建一个新应用程序。
- 为您的机器人添加名称。例如,由于这是我们的第一个机器人,我将其命名为“我们的第一个机器人“并点击“创建”。
- 单击左侧菜单中的“机器人”选项,您将能够查看新创建的机器人的基本详细信息!
- 暂时保留机器人的默认设置,例如保持机器人公开。
瞧!您已经成功创建了第一个机器人!
- 向下滚动到授权流程部分,然后在“特权网关意图”下将所有三个框切换为“打开”。
- 完成后,向上滚动到机器人部分。
- 单击重置令牌按钮旁边的“复制”。这是非常重要的一步,因为它将帮助我们稍后将代码与机器人连接起来。
注意:- 不要与任何人共享令牌,任何人都可以在没有监督的情况下使用它来操纵您的机器人。如果您不小心共享了令牌,请点击“重置令牌”,然后单击“复制”。
创建 Discord 服务器
- 如果您没有可添加机器人的现有服务器,请打开不和谐并单击左侧菜单底部的“+”(添加服务器)按钮。
- 选择“创建我自己的”。
- 然后选择您所需的服务器用途。
- 接下来,为您的服务器命名并点击创建。我选择了这个名字“机器人Python服务器”,你可以随意命名!
- 您现在已经成功创建了一个新的不和谐服务器!
向您的 Discord 机器人授予权限
- 从Discord 开发门户的菜单中单击 OAuth2 选项卡,然后单击 URL 生成器。选中范围下的“机器人”框,然后转到“机器人权限”部分。这将用于向您的机器人授予服务器中的各种权限。
- 例如,在这里我们将检查所有文本权限框,因为我们正在编写一个简单的文本通道机器人,但它可以根据您的使用进行自定义。
注意:在为机器人分配管理员权限之前,您应该小心。
授权您的机器人访问
- 现在,复制页面末尾的 URL 并在新选项卡中打开它。
- 它会请求您的许可来授权机器人,并要求您将其添加到特定服务器。
- 选择所需的服务器并单击继续。我已将其添加到名为“Robot python server”的服务器,但您可以将其添加到您想要的任何服务器。
- 检查所有权限是否正确。向下滚动并单击“授权”按钮。
整洁的!现在该机器人已添加到您各自的服务器并且可以执行特定任务。当您在不和谐中打开服务器时,您将能够看到机器人已离线。
为机器人设置基于云的环境
- 我们将首先创建一个Replit 帐户,它是一个基于云的编码 IDE,支持各种语言,例如 python、bash、C 等。如果您已有 Replit 帐户,则可以直接使用该帐户。单击此处访问官方网站并创建新帐户。
- 使用您的 Google 帐户注册或登录,然后您将进入主仪表板,您需要在其中点击“+创建”才能创建新的 Repl。
- 之后,从左侧下拉菜单中选择 python,并根据需要命名您的 repl。我已经给它命名了“我们的第一个机器人”。点击“创建 Repl”。
- 您的新Repl将如下所示。
注意:使用replit,您不需要在计算机上安装任何额外的东西,这使得编写代码变得更容易。当您在 replit 中导入模块并点击运行时,这些依赖项将自动安装并导入。
- 我们将在 main.py 文件中编写机器人的代码。
将机器人连接到我们自己的 Repl:
- 单击工具下菜单左下角的“秘密”。
- 在面板右侧出现的密钥框中写入“令牌”,然后将您之前复制的令牌粘贴到下面的值框中。点击“添加新秘密”以添加环境变量。
注意:我们可以在使用机器人时将令牌粘贴到 main.py 文件中,但由于 Replit 是一个公共平台,因此其他人可以查看我们的整个 repl。因此,为了保护我们的机器人免受不需要的和恶意的更改,将密钥添加为仅对我们可见而其他人不可见的秘密环境变量非常重要。
用 Python 编写 Discord 机器人
- 下面给出的代码块是我们需要在 main.py 文件中编写的内容,以修改我们的机器人并使其有用。这是基本代码,将帮助我们通过向我们发送“你好!”来测试我们的机器人是否正常工作。当其他人先发送消息时。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 号
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#importing required modules import os import discord import requests import json import random intents = discord.Intents(). all () client = discord.Client(intents = intents) #first event :logging in @client .event async def on_ready(): print ( "successful login as {0.user}" . format (client)) #second event: sending message @client .event async def on_message(message): #check who sent the message if message.author = = client.user: return msg = message.content if msg.startswith( 'hello' ): await message.channel.send( "hello!" ) #getting the secret token client.run(os.getenv( 'token' )) |
- 写完上面的代码后点击“运行”。
- 在编辑器旁边的控制台中,您应该看到如下内容:
2022 - 12 - 15 07 : 20 : 06 INFO discord.client logging in using static token 2022 - 12 - 15 07 : 20 : 07 INFO discord.gateway Shard ID None has connected to Gateway (Session ID : ed722695d1f7e5e06167fefa674cc768). successful login as Our First bot. #5804 |
- 上图是它在 repl 中的样子。
- 现在,如果您打开不和谐应用程序,然后转到添加机器人的服务器,在本例中为:Robot python 服务器,我们将观察到机器人在线!
- 现在,如果您发送“你好”消息,机器人将发回一条消息,如下所示。
拍拍自己的背吧,因为您的机器人现在成功响应了!
将 Discord 机器人修改得有趣(笑话 API)
- 现在,我们必须修改机器人,以便每当用户询问笑话时它就可以发送有趣的文本。
- 以下是我们如何通过添加一个名为“joke”的函数来修改原始代码,该函数将从官方笑话 api中检索随机笑话。
#importing required modules import os import discord import requests import json import random intents = discord.Intents(). all () client = discord.Client(intents = intents) #creating a function to retrieve jokes from the official joke api def joke(j): data = requests.get(j) tt = json.loads(data.text) return tt j = r "https://official-joke-api.appspot.com/random_ten" a = joke(j) #formatting to only get the setup and punchline of joke for i in (a): Setup = (i[ "setup" ]) Punchline = (i[ "punchline" ]) #first event :logging in @client .event async def on_ready(): print ( "successful login as {0.user}" . format (client)) #second event: sending message @client .event async def on_message(message): #check who sent the message if message.author = = client.user: return #retrieving message to look for keywords msg = message.content #to check if above message has required keywords if 'joke' in msg.lower() or 'funny' in msg.lower() or 'laugh' in msg.lower(): await message.channel.send(Setup) await message.channel.send(Punchline) #getting the secret token client.run(os.getenv( 'token' )) |
- 在 main.py 文件中修改如上所示的代码,然后单击“运行”。
- 现在,如果您在服务器的通用文本通道中发送消息,例如“让我笑!”或者“说一些有趣的话”,机器人将以笑话回应这些消息。
万岁!您现在已经成功创建了自己的有趣机器人!
注意: 只有当您通过浏览器运行 repl 中的代码时,机器人才会在线。一旦您关闭浏览器或在repl中点击“停止”,机器人就会恢复离线状态。
因此,最后一步是将您的机器人托管在服务器中,以便即使您关闭浏览器它也能保持在线。
托管您的机器人:
我们必须为不和谐机器人设置一个网络服务器,这可以通过在 Replit 和uptime robots上创建一个网络服务器来完成,这是一个免费的监控网站,用于 ping 我们的机器人,这样即使我们的浏览器关闭,它也会定期发送 ping到我们的不和谐机器人以保持其运行。
- 单击“新文件”并将其命名为“keep_up”.py
- 现在,我们必须编写以下函数来让我们的机器人保持清醒状态,只要我们愿意。
#importing required modules from flask import Flask from threading import Thread app = Flask('') @app .route( '/' ) def home(): return "Hello. I am awake!" def run(): app.run(host = '0.0.0.0' , port = 8080 ) #function to keep the bot awake def keep_awake(): t = Thread(target = run) t.start() |
- 现在,您需要返回 main.py 文件并通过添加另外两行来修改代码:-
#imprting required modules import os import discord import requests import json import random #importing the keep_awake function from the newly created file from Keep_up import keep_awake intents = discord.Intents(). all () client = discord.Client(intents = intents) #creating a function to retrieve jokes from the official joke api def joke(j): data = requests.get(j) tt = json.loads(data.text) return tt j = r "https://official-joke-api.appspot.com/random_ten" a = joke(j) #formatting to only get the setup and punchline of joke for i in (a): Setup = (i[ "setup" ]) Punchline = (i[ "punchline" ]) #first event :logging in @client .event async def on_ready(): print ( "successful login as {0.user}" . format (client)) #second event: sending message @client .event async def on_message(message): #check who sent the message if message.author = = client.user: return #retrieving message to look for keywords msg = message.content #to check if above message has required keywords if 'joke' in msg.lower() or 'funny' in msg.lower() or 'laugh' in msg.lower(): await message.channel.send(Setup) await message.channel.send(Punchline) #calling the awake function keep_awake() #getting the secret token client.run(os.getenv( 'token' )) |
- 现在,当您运行 main.py 文件时,您将能够看到 repl 右侧面板的控制台正上方显示一个网页,如下所示。“你好,我醒了!” 消息也会显示在网页上。
- 接下来,我们将设置 正常运行机器人。
- 如果您已有 Uptime 机器人帐户,请登录您的 Uptime 机器人帐户,或者使用您的 Google 帐户免费注册。
- 验证您的电子邮件,然后您将被重定向到如下所示的窗口,然后点击“添加新监视器”。
- 选择监控类型为“HTTPS”。然后添加您想要为显示器指定的任何名称。我将其命名为“Ourfirstbot”。
- 接下来,复制您编写并保存所有代码的 bot repl 的 URL,并将其粘贴到 URL 部分。
- 将监控间隔设置为“5 分钟”,其余保持不变。
- 向下滚动并点击“创建监视器”。
- 伟大的!您已经创建了第一个正常运行时间机器人监视器。
注意:如果单击“创建监视器”后出现橙色按钮,请点击该橙色按钮一次,您的监视器将被创建。
- 您现在可以在仪表板的左侧查看新创建的监视器。
- 现在,即使您从浏览器中关闭 replit 选项卡,您的机器人仍然会出现在不和谐的在线状态!
自己尝试一下吧!
概括
本教程介绍如何在 Discord 中设置基本文本机器人,有关如何使用 Python 制作 Discord 机器人的更多信息,请访问官方网站。