📌  相关文章
📜  用Python构建 Discord 机器人

📅  最后修改于: 2022-05-13 01:54:29.491000             🧑  作者: Mango

用Python构建 Discord 机器人

如果您熟悉在线社区,并且您是其中的一员或拥有该社区,那么您一定听说过不和谐,而在不和谐中,您可能已经看到管理这些社区的机器人。因此,在本文中,我们将设置我们的 discord 开发者门户帐户,并将创建一个 discord 机器人。具有基本功能的最小机器人,如果您愿意,您可以随时根据需要扩展该机器人的功能。

什么是不和谐?

Discord 是一个免费的聊天应用程序,提供不同的聊天功能,例如语音、视频和文本聊天,全世界数百万人使用它来进行专业和有趣的使用。

人们在不和谐中创建称为服务器的社区,其他人可以加入这些服务器在那里聚会,结识新朋友并谈论他们的兴趣。 Discord 还提供创建私人服务器的功能,只有受邀的人才能使用这些私人服务器加入,人们可以与他们亲密的人进行私人交谈。

Discord 服务器充满了所有者创建的频道,它们可以是文本频道、音频或视频频道。这些频道用于谈论服务器上的特定主题。

什么是不和谐机器人?

每天有超过 1000 万人使用 Discord,使用这些统计数据我们可以清楚地看到人们对社区的兴趣,并且 Discord 正在增长。人们正在探索和加入新的服务器。

随着服务器的普及,一旦成员数量增加,人们往往会更多地加入该服务器,管理员很难管理服务器,这就是机器人发挥作用的地方。管理员机器人可以执行多项任务来增强服务器上的用户体验。其中一些任务是

  • 欢迎新成员。
  • 回答常见问题。
  • 禁止有毒的人进入服务器。
  • 回复、发送、删除消息。
  • 管理人员在服务器中的角色。

而这样的例子不胜枚举。大型不和谐社区的管理员总是喜欢在他们的服务器上启用多个机器人,按照本教程学习后,您还可以创建自己的不和谐机器人,让我们开始吧。

创建 Discord 服务器

首先,我们需要有一个专用服务器来设置我们的机器人。此机器人将在此服务器上的单个通道上工作。要创建服务器,您需要有一个不和谐的帐户,如果您还没有,您只需访问 https://discord.com/ 即可创建一个。

步骤1:点击左侧边栏上的添加服务器(加号)按钮,这将打开创建服务器界面。选择服务器的模板。

创建服务器

第 2 步:选择您是否将此服务器用于娱乐或社区。

附加服务器信息

第 3 步:为您的服务器选择一个好听的名称,如果您将其用于社区,您可以简单地给出您的社区或企业的名称。

服务器名称

第 4 步:您的服务器现已创建

已创建服务器

在服务器上创建通道

现在我们需要创建一个该机器人将处于活动状态的通道,该机器人将仅在该通道上响应。

第 1 步:单击在文本频道列表中添加。

创建频道

第 2 步:选择频道类型为文本频道并为您的频道命名

频道名称和类型

第 3 步:创建频道

频道已创建

创建机器人

现在我们已经准备好服务器帐户,我们可以继续在 discord 开发者门户上创建我们的第一个机器人。 discord 开发者门户是 discord 为想要扩展 discord 功能并将其用于构建更酷东西的人们提供的平台,其中一个例子是创建机器人。

第 1 步:登录门户:转到 https://discord.com/developers/applications 并使用您的 discord 帐户登录,在该帐户中创建了您要为其构建机器人的服务器。

使用 Discord 帐户登录

第 2 步:应用程序引用新功能。例如,博特。单击新应用程序以初始化您的第一个机器人,为您的应用程序选择一个名称。请记住,应用程序的名称将是您的机器人的名称。

创建应用程序

第 3 步:创建 Bot 点击左侧边栏中的 Bot,然后点击 Add Bot。

添加机器人

第 4 步:将打开一个弹出窗口,询问您是否真的要添加机器人,点击Yes, Do it。

验证您要添加机器人

第 5 步:使用下面给出的 COPY 按钮复制令牌 此令牌用于授权不和谐的程序。

复制身份验证令牌

自定义和授权机器人

我们的机器人已创建,是时候授予权限并定义机器人的范围了。权限是指我们的机器人可以在服务器上执行的操作,例如发送消息。范围是指机器人将执行的角色。

第 1 步:点击OAuth2并点击URL Generator ,您将看到多个涉及不同范围的复选框。对于这个机器人,我们将使用bot only scope click on Bot checkbox

Bot的范围

第 2 步:下一个复选框是我们框的权限。我们将授予此机器人发送和回复消息的权限,因此请选中与此相关的所有框。您可以随时更改这些权限并生成新的 URL。

授予机器人权限

第 3 步:向下滚动,您可以看到为机器人生成的 URL ,单击副本以复制此 URL。

生成的网址

第 4 步:将复制的 URL 粘贴到新选项卡中,我们将在服务器上授权我们的机器人。选择我们之前创建的服务器,然后单击继续。

提供服务器名称

第5步:在这里您将看到机器人的权限。如果你想你可以编辑这些,点击授权

管理权限

第 6 步:验证您是具有验证码的人,并且该机器人现在应该已获得授权。

验证验证码

第 7 步:转到服务器,您可以看到机器人的名称出现在离线人员列表中。

机器人出现在服务器中

为机器人编写代码

在本节中,我们将为我们的 discord 机器人编写Python代码。

第 1 步:我们将创建.env文件来存储我们在上面复制的机器人的续订密钥,当我们将代码托管在某个地方时, .env文件将保护我们的凭据。首先,在您的项目文件夹中创建一个名为.env的文件,然后插入以下代码。

第 2 步:导入模块

为主要的机器人代码创建一个新的Python文件,并根据需要命名并导入必要的模块。

  • discord: discord 提供的库,用于使用功能丰富的 discord API。
  • os:我们正在使用环境变量 os 模块用于导入这些变量。
  • random:用于对数据进行各种随机操作。
  • dotenv:将 .env dile 导入主Python文件。
Python3
import discord
import os
import random
from dotenv import load_dotenv


Python3
load_dotenv()
 
client = discord.Client()
token = os.getenv('TOKEN')


Python3
@client.event
async def on_ready():
    print("Logged in as a bot {0.user}".format(client))


Python3
@client.event
async def on_message(message):
    username = str(message.author).split("#")[0]
    channel = str(message.channel.name)
    user_message = str(message.content)
 
    print(f'Message {user_message} by {username} on {channel}')
 
    if message.author == client.user:
        return
 
    if channel == "random":
        if user_message.lower() == "hello" or user_message.lower() == "hi":
            await message.channel.send(f'Hello {username}')
            return
        elif user_message.lower() == "bye":
            await message.channel.send(f'Bye {username}')
        elif user_message.lower() == "tell me a joke":
            jokes = [" Can someone please shed more\
            light on how my lamp got stolen?",
                     "Why is she called llene? She\
                     stands on equal legs.",
                     "What do you call a gazelle in a \
                     lions territory? Denzel."]
            await message.channel.send(random.choice(jokes))


Python3
client.run(token)


第 3 步:初始化变量

Python3

load_dotenv()
 
client = discord.Client()
token = os.getenv('TOKEN')

使用 load_dotenv()函数导入环境变量。创建 discord 客户端以向 discord API 发送请求,最后我们获取并初始化我们的环境变量令牌。

第 4 步:初始化我们的机器人

Python3

@client.event
async def on_ready():
    print("Logged in as a bot {0.user}".format(client))

在这里,我们使用 discord API 提供的 on_ready() 事件,一旦我们的 API 客户端初始化此事件将触发执行给定的操作。在这里,我们正在打印我们的机器人的名称。

第 5 步:设置机器人响应

  • 我们正在为用户消息设置适当的机器人响应。 Discord API 事件 on_message 将参数作为消息用于此目的,message 参数包含有关消息的详细信息、消息的作者、消息已发送到的通道等。
  • 首先提取有关消息的信息,例如用户名、频道和消息内容。
  • 如果消息是由机器人本身发送的,则下一行起着重要作用,如果没有写入此条件,则不响应它,那么机器人将无限地响应自己。
  • 我们将在我们在服务器中创建的名为 random 的频道上激活我们的机器人,您也可以在其他频道中激活机器人。编写多个 if-else 语句会起作用,但您也可以使用机器学习实现聊天机器人。在这里,我们实现了一些 if-else 语句来响应基本消息,例如 hi、hello 和 bye,并实现了一个基本语句来讲笑话。您始终可以添加更多功能并使您的机器人更具交互性。

Python3

@client.event
async def on_message(message):
    username = str(message.author).split("#")[0]
    channel = str(message.channel.name)
    user_message = str(message.content)
 
    print(f'Message {user_message} by {username} on {channel}')
 
    if message.author == client.user:
        return
 
    if channel == "random":
        if user_message.lower() == "hello" or user_message.lower() == "hi":
            await message.channel.send(f'Hello {username}')
            return
        elif user_message.lower() == "bye":
            await message.channel.send(f'Bye {username}')
        elif user_message.lower() == "tell me a joke":
            jokes = [" Can someone please shed more\
            light on how my lamp got stolen?",
                     "Why is she called llene? She\
                     stands on equal legs.",
                     "What do you call a gazelle in a \
                     lions territory? Denzel."]
            await message.channel.send(random.choice(jokes))

第 6 步:运行机器人

我们在上面创建了 API 客户端,它提供了一个调用函数来运行该函数,该函数将参数 auth 令牌作为参数,并通过调用 on_ready 事件来运行机器人。

Python3

client.run(token)

输出:

机器人响应用户消息

日志:

输出日志