使用 Python 的 Discord 角色分配机器人
Discord是一个免费使用的聊天服务器应用程序,最初是为游戏玩家开发的,但现在越来越广泛地被许多不同的社区使用。任何人都可以使用它来创建聊天服务器,以通过文本以及语音和视频进行讨论。除了托管人类成员之外,这些服务器还可以托管特殊的自动化用户,称为机器人,它们能够执行各种有趣和有用的任务:从播放音乐到帮助人类版主。 在本教程中,我们将为我们的编程讨论 Discord 服务器创建一个欢迎机器人。该机
Discord是一个免费使用的聊天服务器应用程序,最初是为游戏玩家开发的,但现在越来越广泛地被许多不同的社区使用。任何人都可以使用它来创建聊天服务器,以通过文本以及语音和视频进行讨论。除了托管人类成员之外,这些服务器还可以托管特殊的自动化用户,称为机器人,它们能够执行各种有趣和有用的任务:从播放音乐到帮助人类版主。
在本教程中,我们将为我们的编程讨论 Discord 服务器创建一个欢迎机器人。该机器人将欢迎用户加入,并根据他们声明的兴趣为其分配角色和私人频道。在本教程结束时,您将:
-
熟悉创建 Discord 机器人应用程序的过程。
-
能够使用discord.py开发有用的机器人逻辑。
-
知道如何在 Replit 上托管 Discord 机器人!
入门
登录Replit或如果您还没有创建帐户。登录后,创建一个 Python repl。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--ycXX4QgY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit- docs-images.bardia.repl.co/images/tutorials/46-discord-role-bot/create-repl.png)
创建 Discord 应用程序
打开另一个浏览器选项卡并访问Discord Developer Portal。使用您的 Discord 帐户登录,或者如果您还没有创建一个,请创建一个。保持你的 repl 开放——我们很快就会回来。
登录后,创建一个新应用程序。给它起个名字,比如“欢迎者”。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Tv9LGUUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit -docs-images.bardia.repl.co/images/tutorials/46-discord-role-bot/discord-create-app.png)
Discord 应用程序可以通过多种不同方式与 Discord 交互,并非所有方式都需要机器人,因此创建一个是可选的。也就是说,我们需要一个用于这个项目。让我们创建一个机器人。
-
点击页面左侧菜单中的Bot。
-
单击添加机器人。
-
给你的机器人一个用户名(例如“WelcomeBot”)。
-
点击Reset Token,然后Yes, do it!
-
复制出现在您的机器人用户名下方的令牌。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--cE3b-Kie--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:// replit-docs-images.bardia.repl.co/images/tutorials/46-discord-role-bot/discord-create-bot.png)
您刚刚复制的令牌是我们 repl 中的代码与 Discord 的 API 交互所必需的。返回您的 repl 并打开左侧边栏中的 Secrets 选项卡。创建一个以DISCORD_TOKEN
作为其密钥并将您复制的令牌作为其值的新密钥。
srcu003d"https://replit-docs-images.bardia.repl.co/images/tutorials/46-discord-role-bot/secret-token.png"
altu003d"秘密令牌"
/>
完成后,返回 Discord 开发者面板。我们需要完成设置我们的机器人。
首先,禁用 Public Bot 选项——我们为此 bot 构建的功能将高度特定于我们的服务器,因此我们不希望任何其他人尝试将其添加到他们的服务器。更重要的是,100 台或更多服务器上的机器人必须经过特殊的验证和批准流程,我们不想担心这一点。
其次,我们需要配置对特权Gateway Intents的访问。根据机器人的功能,它需要访问不同的事件和数据源。涉及用户操作及其消息内容的事件被认为更敏感,需要明确启用。
为了让这个机器人工作,我们需要能够看到用户何时加入我们的服务器,并且我们需要看到他们的消息内容。对于前者,我们需要 Server Members Intent,对于后者,我们需要 Message Content Intent。将这两个切换到“开”位置。出现提示时保存更改。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--38QrrxjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/bot-intents.png)
现在我们已经创建了我们的应用程序及其机器人,我们需要将它添加到服务器。我们将引导您为本教程创建一个测试服务器,但您也可以使用您过去创建的任何服务器,只要其他成员不会对它成为机器人测试场感到太恼火。您不能使用您只是普通用户的服务器,因为添加机器人需要特殊权限。
在浏览器中打开Discord.com。您应该已经登录。然后单击最左侧面板中的 + 图标以创建新服务器。或者,打开您拥有的现有服务器。
[](https://res.cloudinary.com/practicaldev/image/fetch/s---ArPwRvp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs -images.bardia.repl.co/images/tutorials/46-discord-role-bot/new-server.png)
在单独的选项卡中,返回Discord Dev Portal并打开您的应用程序。请按照以下步骤将您的机器人添加到您的服务器:
-
点击左侧边栏中的OAuth2。
-
在 OAuth2 下出现的菜单中,选择 URL Generator。
-
在 Scopes 下,标记标记为 bot 的复选框。
-
在 Bot Permissions 下,选中标有 Administrator 的复选框。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Ze41A8nN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/bot-permissions.png)
- 向下滚动并复制 Generated URL 下的 URL。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--voqhIqJY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/generated-url.png)
-
将 URL 粘贴到浏览器的导航栏中,然后按 Enter。
-
在出现的页面上,从下拉框中选择您的服务器,然后单击继续。
-
当提示有关权限时,单击 Authorize,然后完成 CAPTCHA。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--YneABsJv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/bot-connect.png)
- 返回您的 Discord 服务器。您应该看到您的机器人刚刚加入。
现在我们已经完成了准备工作,是时候编写一些代码了。返回到下一部分的 repl。
编写 Discord 机器人代码
我们将使用discord.py通过 Python 与 Discord 的 API 进行交互。在您的 repl 中将以下代码脚手架添加到main.py
:
import os, re, discord
from discord.ext import commands
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
bot = commands.Bot(command_prefix="!")
@bot.event
async def on_ready():
print(f"{bot.user} has connected to Discord!")
bot.run(DISCORD_TOKEN)
进入全屏模式 退出全屏模式
首先,我们导入我们需要的 Python 库,包括 discord.py 及其命令扩展。接下来我们检索DISCORD_TOKEN
环境变量的值,我们在上面的 repl 的 secrets 选项卡中设置了它。然后我们实例化一个Bot
对象。我们将使用这个对象来监听 Discord 事件并做出响应。
我们感兴趣的第一个事件是on_ready()
,它将在我们的机器人登录到 Discord 时触发(装饰器@bot.event
确保了这一点)。这个事件所做的就是向我们的 repl 控制台打印一条消息,告诉我们机器人已经连接。
请注意,我们在函数定义前添加了async
——这使得我们的on_ready()
函数成为协程。协程在很大程度上类似于函数,但可能不会立即执行,必须使用await
关键字调用。使用协程使我们的程序异步,这意味着它可以在等待长时间运行的函数的结果时继续执行代码,通常是依赖于输入或输出的函数。如果您以前使用过 JavaScript,您会认出这种编程风格。
我们文件中的最后一行启动机器人,提供DISCORD_TOKEN
对其进行身份验证。现在运行您的 repl 以查看它的实际效果。启动后,返回您的 Discord 服务器。您应该看到您的机器人用户现在在线。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--fNjxKfXu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/online-bot.png)
创建服务器角色
在我们编写机器人的主要逻辑之前,我们需要为其分配一些角色。我们的 Discord 服务器用于编程讨论,因此我们将为几种不同的编程语言创建角色:Python、JavaScript、Rust、Go 和 C++。为了简单起见,我们将使用全小写的角色名称。随意添加其他语言。
您可以通过执行以下操作添加角色:
-
右键单击最左侧面板中的服务器图标。
-
从出现的菜单中,选择Server Settings,然后选择Roles。
-
单击创建角色。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--UT8_s40v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/create-role.png)
-
输入角色名称(例如“python”)并选择颜色。
-
单击返回。
-
重复步骤 3-5,直到创建所有角色。
您的角色列表现在应该如下所示:
[](https://res.cloudinary.com/practicaldev/image/fetch/s--EqWGIMOn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/roles-list.png)
列出角色的顺序是角色层次结构。有权管理角色的用户将只能管理低于其在此列表中最高角色的角色。确保 WelcomeBot 角色位于顶部,否则它将无法将用户分配给任何其他角色,即使具有管理员权限也是如此。
目前,所有这些角色都会改变用户名称的颜色以及他们出现在右侧边栏上的列表。为了让它们更有意义,我们可以创建一些私人频道。只有具有给定角色的用户才能使用这些频道。
要为您的服务器角色添加专用频道,请执行以下操作:
-
点击 Text Channels 旁边的 +。
-
在 Channel Name 下键入一个通道名称(例如“python”)。
-
启用 Private Channel 切换。
-
单击创建频道。
-
选择与您的频道名称匹配的角色。
-
对所有角色重复。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--gBU4K_oE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/create-channel.gif)
作为服务器所有者,无论您分配的角色如何,您都可以看到这些频道,但普通成员不会。
消息用户
现在我们的角色已经配置好了,让我们编写一些机器人逻辑。我们将从向 DM 用户发送欢迎消息的功能开始。返回到您的 repl 并在您定义bot
的行下方输入以下代码:
async def dm_about_roles(member):
print(f"DMing {member.name}...")
await member.send(
f"""Hi {member.name}, welcome to {member.guild.name}!
Which of these languages do you use:
* Python (🐍)
* JavaScript (🕸️)
* Rust (🦀)
* Go (🐹)
* C++ (🐉)
Reply to this message with one or more of the language names or emojis above so I can assign you the right roles on our server.
"""
)
进入全屏模式 退出全屏模式
这个简单的函数接受一个member
对象并向其发送私人消息。注意在运行协程member.send()
时使用await
。
当发生以下两种情况之一时,我们需要运行此函数:新成员加入服务器,或现有成员在频道中键入命令!roles
。第二个将允许我们在不经常离开和重新加入服务器的情况下测试机器人,并让用户改变他们想要讨论的编程语言的想法。
要处理第一个事件,请在on_ready
的定义下方添加以下代码:
@bot.event
async def on_member_join(member):
await dm_about_roles(member)
进入全屏模式 退出全屏模式
on_member_join()
回调提供了一个member
对象,我们可以使用它来调用dm_about_roles()
。
对于第二个事件,我们需要更多代码。虽然我们可以使用 discord.py 的bot 命令框架来处理我们的!roles
命令,但我们稍后还需要处理一般的消息内容,并且在不同的功能中同时执行这两种方法效果不佳。因此,我们将把与消息内容有关的所有内容都放在一个on_message()
事件中。如果我们的机器人只是响应命令,使用@bot.command
处理程序会更好。
在on_member_join()
的定义下方添加以下代码:
@bot.event
async def on_message(message):
print("Saw a message...")
if message.author == bot.user:
return # prevent responding to self
# Respond to commands
if message.content.startswith("!roles"):
await dm_about_roles(message.author)
进入全屏模式 退出全屏模式
首先,我们向 repl 控制台打印一条消息,以说明我们已经看到了一条消息。然后我们检查消息的作者是否是机器人本身。如果是,我们终止函数,以避免无限循环。之后,我们检查消息的内容是否以!roles
开头,如果是,我们调用dm_amount_roles()
,传入消息的作者。
现在停止并重新运行您的 repl。如果您收到 CloudFlare 错误,请在您的 repl 的 shell 中键入kill 1
并重试。一旦您的 repl 运行,返回您的 Discord 服务器并在常规聊天中输入“!roles”。您应该会收到来自您的机器人的 DM。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--Ss7tfA_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs -images.bardia.repl.co/images/tutorials/46-discord-role-bot/bot-dm.png)
从回复中分配角色
我们的 bot 可以 DM 用户,但是当用户回复它时它不会做任何事情。在我们添加该逻辑之前,我们需要实现一个小技巧,以允许我们的机器人根据直接消息的内容在我们的服务器上采取行动。
Discord 机器人框架的设计假设机器人是通用的,并且将被添加到许多不同的服务器中。机器人没有家庭服务器,它们没有简单的方法来跟踪从服务器移动到私人消息的流程,就像我们在这里构建的那样。因此,当用户回复其 DM 时,我们的机器人不会自动知道使用哪个服务器来分配角色。
我们可以通过用户的mutual_guilds
属性确定使用哪个服务器,但由于缓存的原因,它并不总是可靠的。请注意,Discord 服务器以前称为“公会”,该术语在 API 的各个领域中仍然存在。
由于我们不打算一次将此机器人添加到多个服务器,因此我们将通过在机器人逻辑中硬编码服务器 ID 来解决问题。但首先,我们需要检索服务器的 ID。最简单的方法是在我们的机器人词汇表中添加另一个命令。展开on_message()
底部的if
语句以包括以下elif
:
elif message.content.startswith("!serverid"):
await message.channel.send(message.channel.guild.id)
进入全屏模式 退出全屏模式
重新运行您的 repl 并返回您的 Discord 服务器。在聊天中输入“!serverid”,您应该会从您的机器人那里收到包含一长串数字的回复。将该字符串复制到剪贴板。
转到main.py
的顶部。在DISCORD_TOKEN
下,添加以下行:
SERVER_ID =
进入全屏模式 退出全屏模式
在等号之后粘贴剪贴板的内容。现在我们可以从这个变量中检索我们的服务器 ID。
完成后,返回on_message()
的定义。我们将添加另一个if
语句来处理 DM 中用户回复的内容。编辑函数体,使其与以下内容匹配:
@bot.event
async def on_message(message):
print("Saw a message...")
if message.author == bot.user:
return # prevent responding to self
# NEW CODE BELOW
# Assign roles from DM
if isinstance(message.channel, discord.channel.DMChannel):
await assign_roles(message)
return
# NEW CODE ABOVE
# Respond to commands
if message.content.startswith("!roles"):
await dm_about_roles(message.author)
elif message.content.startswith("!serverid"):
await message.channel.send(message.channel.guild.id)
进入全屏模式 退出全屏模式
这个新的if
语句将检查触发事件的消息是否在 DM 通道中,如果是,将运行assign_roles()
然后退出。现在我们需要定义assign_roles()
。在on_message()
的定义上方添加以下代码:
async def assign_roles(message):
print("Assigning roles...")
languages = set(re.findall("python|javascript|rust|go|c\+\+", message.content, re.IGNORECASE))
进入全屏模式 退出全屏模式
我们可以使用正则表达式找到用户回复中提到的语言:re.findall()
将返回与我们的表达式匹配的字符串列表。这样,无论用户回复“请将我添加到 Python 和 Go 组”还是只是“python go”,我们都可以为他们分配正确的角色。
我们将列表转换为集以删除重复项。
我们需要做的下一件事是处理表情符号响应。将以下代码添加到assign_roles()
函数的底部:
language_emojis = set(re.findall("\U0001F40D|\U0001F578|\U0001F980|\U0001F439|\U0001F409", message.content))
# https://unicode.org/emoji/charts/full-emoji-list.html
# Convert emojis to names
for emoji in language_emojis:
{
"\U0001F40D": lambda: languages.add("python"),
"\U0001F578": lambda: languages.add("javascript"),
"\U0001F980": lambda: languages.add("rust"),
"\U0001F439": lambda: languages.add("go"),
"\U0001F409": lambda: languages.add("c++")
}[emoji]()
进入全屏模式 退出全屏模式
在第一行中,我们使用与语言名称相同的正则表达式匹配,但使用 emoji Unicode 值而不是标准文本。您可以在 Unicode.org](https://unicode.org/emoji/charts/full-emoji-list.html)上找到[表情符号列表及其代码。请注意,此列表代码中的+
应替换为 Python 代码中的000
:例如,U+1F40D
变为U0001F40D
。
一旦我们在language_emojis
中获得了我们的表情符号匹配集,我们将遍历它并使用字典将正确的名称添加到我们的languages
集。该字典将字符串作为值,将 lambda 函数作为键。最后,100190 emoji 100191 100189
将为提供的键选择 lambda 函数并执行它,将值添加到languages
。这类似于您可能在其他编程语言中看到的switch-case语法。
我们现在拥有用户可能希望讨论的语言的完整列表。在for
循环下面添加以下代码:
if languages:
server = bot.get_guild(SERVER_ID)
roles = [discord.utils.get(server.roles, name=language.lower()) for language in languages]
member = await server.fetch_member(message.author.id)
进入全屏模式 退出全屏模式
此代码首先检查languages
集是否包含值。如果是这样,我们使用get_guild()
来检索对应于我们服务器 ID 的Guild
对象(请记住,公会意味着服务器)。
然后我们使用列表理解和 discord.py 的get()
函数来构造与我们列表中的语言对应的所有角色的列表。请注意,我们使用lower()
来确保我们所有的字符串都是小写的。
最后,我们检索与向我们发送消息的用户和我们的服务器对应的member
对象。
我们现在拥有分配角色所需的一切。在if
语句的主体内,将以下代码添加到if
语句的底部:
try:
await member.add_roles(*roles, reason="Roles assigned by WelcomeBot.")
except Exception as e:
print(e)
await message.channel.send("Error assigning roles.")
else:
await message.channel.send(f"""You've been assigned the following role{"s" if len(languages) > 1 else ""} on {server.name}: { ', '.join(languages) }.""")
进入全屏模式 退出全屏模式
member
对象的add_roles()
方法将任意数量的role
对象作为位置参数。我们使用*
操作符将我们的languages
集合解包成单独的参数,并为命名参数reason
提供一个字符串。
我们的操作包含在try-except-else块中。如果添加角色失败,我们会将生成的错误打印到我们的 repl 控制台并向用户发送一般错误消息。如果成功,我们将向用户发送一条消息,通知他们他们的新角色,广泛使用字符串插值。
最后,我们需要处理在用户的消息中没有找到语言的情况。在if languages:
块的底部添加一个else:
块,如下所示:
else:
await message.channel.send("No supported languages were found in your message.")
进入全屏模式 退出全屏模式
重新运行您的 repl 并返回您的 Discord 服务器。使用您的机器人打开 DM 频道并尝试向其发送一种或多种语言名称或表情符号。您应该收到预期的角色。您可以通过在 Discord 服务器的右侧面板中单击您的姓名来检查这一点——您的角色将列在出现的框中。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--9MiWJpqH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/roles.png)
删除角色
我们的代码目前不允许用户删除自己的角色。虽然我们可以作为服务器所有者手动执行此操作,但我们已经构建了此机器人以避免必须执行此类操作,因此让我们扩展我们的代码以允许删除角色。
为简单起见,我们将删除用户提到的任何他们已经拥有的角色。因此,如果具有“python”角色的用户写入“c++ python”,我们将添加“c++”角色并删除“python”角色。
让我们做一些改变。在assign_roles()
函数中找到if languages:
块,并将try:
以上的代码更改为与以下内容匹配:
if languages:
server = bot.get_guild(SERVER_ID)
# <-- RENAMED VARIABLE + LIST CHANGED TO SET
new_roles = set([discord.utils.get(server.roles, name=language.lower()) for language in languages])
member = await server.fetch_member(message.author.id)
# NEW CODE BELOW
current_roles = set(member.roles)
进入全屏模式 退出全屏模式
我们用一组新角色替换角色列表。我们还创建了用户当前拥有的一组角色。给定这两个集合,我们可以使用集合操作找出要添加和删除的角色。在current_roles
的定义下方添加以下代码:
roles_to_add = new_roles.difference(current_roles)
roles_to_remove = new_roles.intersection(current_roles)
进入全屏模式 退出全屏模式
要添加的角色将是new_roles
但不在current_roles
中的角色,即集合的_difference_。要删除的角色将是两个集合中的角色,即它们的_intersection_。
现在我们需要用下面的代码替换 try-except-else 块:
try:
await member.add_roles(*roles_to_add, reason="Roles assigned by WelcomeBot.")
await member.remove_roles(*roles_to_remove, reason="Roles revoked by WelcomeBot.")
except Exception as e:
print(e)
await message.channel.send("Error assigning/removing roles.")
else:
if roles_to_add:
await message.channel.send(f"You've been assigned the following role{'s' if len(roles_to_add) > 1 else ''} on {server.name}: { ', '.join([role.name for role in roles_to_add]) }")
if roles_to_remove:
await message.channel.send(f"You've lost the following role{'s' if len(roles_to_remove) > 1 else ''} on {server.name}: { ', '.join([role.name for role in roles_to_remove]) }")
进入全屏模式 退出全屏模式
此代码遵循与我们原始块相同的一般逻辑,但可以删除角色以及添加角色。
最后,我们需要更新机器人的原始 DM 以反映这一新功能。找到dm_about_roles()
函数,修改如下:
async def dm_about_roles(member):
print(f"DMing {member.name}...")
await member.send(
f"""Hi {member.name}, welcome to {member.guild.name}!
Which of these languages do you use:
* Python (🐍)
* JavaScript (🕸️)
* Rust (🦀)
* Go (🐹)
* C++ (🐉)
Reply to this message with one or more of the language names or emojis above so I can assign you the right roles on our server.
Reply with the name or emoji of a language you're currently using and want to stop and I'll remove that role for you.
"""
)
进入全屏模式 退出全屏模式
重新运行您的 repl 并进行测试。您应该能够为自己添加和删除角色。尝试邀请您的一些朋友到您的 Discord 服务器,并让他们也使用该机器人。他们应该在加入后立即收到 DM。
[](https://res.cloudinary.com/practicaldev/image/fetch/s--wn9ltwEF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs- images.bardia.repl.co/images/tutorials/46-discord-role-bot/welcome.png)
[](https://res.cloudinary.com/practicaldev/image/fetch/s--bvfEBDwJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://replit-docs -images.bardia.repl.co/images/tutorials/46-discord-role-bot/bot-role-message.png)
下一步在哪里?
我们创建了一个简单的 Discord 服务器欢迎机器人。附加功能的空间很大。以下是一些扩展的想法:
-
包括更复杂的角色分配逻辑。例如,您可能有一些角色要求用户在一定时间内成为服务器的成员。
-
让您的机器人根据行为自动分配其他用户角色。例如,您可以为对带有最多表情符号的消息做出反应的用户分配一个角色。
-
添加其他命令。例如,您可能希望有一个搜索 Stack Overflow 的命令,允许成员从聊天中提出编程问题。
Discord 机器人代码可以永久托管在 Replit 上,但您需要使用Always-onrepl 以保持其 24/7 运行。
(https://docs.replit.com/hosting/enabling-always-on) repl 让它保持 24/7 运行。
您可以在https://replit.com/@ritza/DiscordWelcomeBot找到示例 repl
更多推荐
所有评论(0)