<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Discord - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Discord - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 14 May 2026 08:49:33 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/discord/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ RTC Connecting Discord——如何修复服务器错误 ]]>
                </title>
                <description>
                    <![CDATA[ Discord 是一个即时通讯应用程序，让你通过语音、视频和文本进行沟通。它有基于 web 的版本、桌面应用程序和移动应用程序。 有时，当你试图创建一个语音通话连接时，你会得到一个错误 “RTC Connecting Discord”。这条信息会一直显示，没有任何有意义的进展。 那么，这个错误是什么意思？ Discord 使用实时聊天协议（RTC）来运行并发通信。因此，如果你遇到 “RTC Connecting Discord” 的问题，这就是一个网络问题。 在这篇文章中，我将向你展示你可以对你的网络配置做出的 5 个改变，以解决 RTC 连接 Discord 的问题。其中 3 个修复方法涉及你的电脑网络设置，而其余 2 个就发生在你的 Discord 应用程序中。 如何通过更新你的网络驱动程序来修复 RTC Connecting Discord 的问题 如果你的设备依赖过时的网络适配器驱动程序进行互联网连接，它可能对你的互联网体验产生负面影响——也可能导致这个问题。 因此，更新你的网络驱动程序可以解决这个问题。 下面的步骤带你了解如何更新你的网络适配器驱动程序。 第  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/rtc-connecting-discord-how-to-fix-the-server-error/</link>
                <guid isPermaLink="false">6461b1660f634b0716652fff</guid>
                
                    <category>
                        <![CDATA[ Discord ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chengjun.L ]]>
                </dc:creator>
                <pubDate>Mon, 15 May 2023 04:10:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/05/Discord.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/rtc-connecting-discord-how-to-fix-the-server-error/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">RTC Connecting Discord – How to Fix the Server Error</a>
      </p><p>Discord 是一个即时通讯应用程序，让你通过语音、视频和文本进行沟通。它有基于 web 的版本、桌面应用程序和移动应用程序。</p><p>有时，当你试图创建一个语音通话连接时，你会得到一个错误 “RTC Connecting Discord”。这条信息会一直显示，没有任何有意义的进展。</p><p>那么，这个错误是什么意思？</p><p>Discord 使用实时聊天协议（RTC）来运行并发通信。因此，如果你遇到 “RTC Connecting Discord” 的问题，这就是一个网络问题。</p><p>在这篇文章中，我将向你展示你可以对你的网络配置做出的 5 个改变，以解决 RTC 连接 Discord 的问题。其中 3 个修复方法涉及你的电脑网络设置，而其余 2 个就发生在你的 Discord 应用程序中。</p><h2 id="-rtc-connecting-discord-">如何通过更新你的网络驱动程序来修复 RTC Connecting Discord 的问题</h2><p>如果你的设备依赖过时的网络适配器驱动程序进行互联网连接，它可能对你的互联网体验产生负面影响——也可能导致这个问题。</p><p>因此，更新你的网络驱动程序可以解决这个问题。</p><p><strong>下面的步骤带你了解如何更新你的网络适配器驱动程序。</strong></p><p><strong>第 1 步：</strong>点击“开始”（Windows 标志），搜索“设备管理器”。点击 ENTER 键，打开第一个搜索结果——这总是设备管理器。你也可以点击“设备管理器”的搜索结果。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-1.jpg" class="kg-image" alt="ss-1" width="600" height="400" loading="lazy"></figure><p><strong>第 2 步：</strong>展开“网络适配器”。</p><p><strong>第 3 步：</strong>寻找正在使用的适配器，右击它并选择“更新驱动程序”。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-2.jpg" class="kg-image" alt="ss-2" width="600" height="400" loading="lazy"></figure><p><strong>第 4 步：</strong>选择“自动搜索驱动程序”。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-3.jpg" class="kg-image" alt="ss-3" width="600" height="400" loading="lazy"></figure><p>现在，Windows 将在互联网上搜索更新的驱动程序，并为你安装它。</p><h2 id="-rtc-connecting-discord--1">如何通过改变你的域名服务器来修复 RTC Connecting Discord 的问题</h2><p>域名服务器（DNS）是由你的 ISP（互联网服务提供商）分配给你的。域名服务器使人们有可能通过向浏览器输入地址（URL）而不是一些不可读的数字来访问网站。</p><p>把这个 DNS 改成一个广泛使用的 DNS，如谷歌或 Cloudflare 的 DNS，可以帮助你解决 RTC Connecting Discord 的问题。</p><p><strong>要把你的 DNS 改成谷歌的，请按照下面的步骤。</strong></p><p><strong>第 1 步：</strong>右击“开始”，选择“运行”，打开“运行”对话。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-4.jpg" class="kg-image" alt="ss-4" width="600" height="400" loading="lazy"></figure><p><strong>第 2 步：</strong>输入 <code>“Control ncpa.cpl”</code>（不带引号），然后点击 <code>ENTER</code>。这将打开你的网络连接设备。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-5-2.png" class="kg-image" alt="ss-5-2" width="600" height="400" loading="lazy"></figure><p><strong>第 3 步：</strong>右键点击你当前的网络，选择“属性”。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-6-1.jpg" class="kg-image" alt="ss-6-1" width="600" height="400" loading="lazy"></figure><p><strong>第 4 步：</strong>寻找互联网协议版本 4（TCP/IPv4）并双击它。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-7.jpg" class="kg-image" alt="ss-7" width="600" height="400" loading="lazy"></figure><p><strong>第 5 步：</strong>点击“使用以下 DNS 服务器地址”单选按钮并输入以下数值：</p><ul><li>8.8.8.8 为首选 DNS 服务器</li><li>8.8.4.4 为备用 DNS 服务器</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-8.jpg" class="kg-image" alt="ss-8" width="600" height="400" loading="lazy"></figure><p><strong><strong>第</strong> <strong>6</strong> 步：</strong>点击 Ok。</p><p>通过下一步的修复，完成设置。</p><h2 id="-rtc-connecting-discord--2">如何通过在命令行中清除你的计算机网络缓存来修复 RTC Connecting Discord 的问题</h2><p>如果你使用的是基于 web 的 Discord，这个修复方法应该有效。</p><p>你可以在浏览器上清除网络缓存，但更有效的方法是在 Windows 10 电脑上用命令行直接清除。</p><p>下面的步骤告诉你如何做到这一点。</p><p><strong>第 1 步：</strong>点击键盘上的 <code>WIN</code>（Windows 标志）键，搜索 “cmd”。</p><p>你必须以管理员身份使用命令提示符，所以你应该选择右边的“以管理员身份运行”，而不是直接点击 <code>ENTER</code> 键盘来打开它。</p><p><strong>第 2 步：</strong>逐个输入并执行以下命令：</p><ul><li><code>ipconfig /release</code></li><li><code>ipconfig /flushdns</code></li><li><code>ipconfig /renew</code></li></ul><p><strong>第 3 步：</strong>重新启动你的电脑。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-9.png" class="kg-image" alt="ss-9" width="600" height="400" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-10.png" class="kg-image" alt="ss-10" width="600" height="400" loading="lazy"></figure><h2 id="-qos-rtc-connecting-discord-">如何通过禁用 QoS 来修复 RTC Connecting Discord 的问题</h2><p>Discord 的 QoS（服务质量）和你的路由器通信，正在传输的数据单位具有高优先级。这可能使你的路由器行为失常，并导致 RTC Connecting Discord 的问题。</p><p>因此，如果你启用了 QoS，禁用它可能会解决这个问题。</p><p><strong>按照下面的步骤，在 Discord 上禁用 QoS。</strong></p><p><strong>第 1 步：</strong>启动 Discord，然后点击左下角的“设置”。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-11.jpg" class="kg-image" alt="ss-11" width="600" height="400" loading="lazy"></figure><p><strong>第 2 步：</strong>在左侧面板上选择语音和视频。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-12.jpg" class="kg-image" alt="ss-12" width="600" height="400" loading="lazy"></figure><p><strong>第 3 步：</strong>向下滚动到 QoS 部分并禁用它。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-13.jpg" class="kg-image" alt="ss-13" width="600" height="400" loading="lazy"></figure><p><strong>第 4 步：</strong>重新启动 Discord 应用程序。</p><h2 id="-discord-rtc-connecting-discord-">如何通过改变 Discord 的音频子系统来修复 RTC Connecting Discord 的问题</h2><p>在 Discord 中，旧版（legacy）音频子系统一直被认为是最好的，因为与标准和实验性音频子系统相比，它的质量最高。</p><p>将你的音频子系统改为 Legacy 可以使你创建高质量的音频——这可以最终解决 RTC Connecting Discord 的问题。</p><p><strong>这些步骤带你了解如何将你的音频子系统改为 Legacy。</strong></p><p><strong>第 1 步：</strong>打开 Discord，点击左下角的“设置”。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-11.jpg" class="kg-image" alt="ss-11" width="600" height="400" loading="lazy"></figure><p>第 2 步：选择语音和视频。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-12.jpg" class="kg-image" alt="ss-12" width="600" height="400" loading="lazy"></figure><p><strong>第 3 步：</strong>向下滚动到音频子系统下拉菜单，选择 “Legacy”。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/12/ss-14.jpg" class="kg-image" alt="ss-14" width="600" height="400" loading="lazy"></figure><p><strong>第 4 步：</strong>重新启动 Discord。</p><h2 id="-">总结</h2><p>本文向你展示了如何解决你在尝试使用 Discord 的音频通话功能时可能遇到的 RTC Connecting Discord 问题。</p><p>除了本文解释的解决方案外，你可以尝试其他小的修复方法，如：</p><ul><li>重新启动你的设备——电脑和路由器</li><li>仔细检查互联网连接</li><li>使用 VPN</li></ul><p>非常感谢你阅读这篇文章。如果你觉得它有帮助，请与你的朋友和亲人分享它。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何用 Python 构建 Discord 机器人并免费托管 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：Python Discord Bot Tutorial – Code a Discord Bot And Host it for Free [https://www.freecodecamp.org/news/create-a-discord-bot-with-python/]，作者：Beau Carnes [https://www.freecodecamp.org/news/author/beau/] 本教程将告诉你如何完全在云端建立你自己的 Discord 机器人。 你不需要在你的电脑上安装任何东西，也不需要支付任何费用来托管你的机器人。 我们将使用一些工具，包括 Discord API、Python 库和一个名为 Repl.it [https://www.repl.it]  的云计算平台。 这个书面教程也有一个视频版本 [https://www.youtube.com/watch?v=SPTfmiYiuok&feature=emb_imp_woyt]。 如何创建一个 Discord Bot 账户 为了使用 Python 库和 Discord API，我们必须首先创 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/create-a-discord-bot-with-python/</link>
                <guid isPermaLink="false">627a1d1fc9c067061df8b7c4</guid>
                
                    <category>
                        <![CDATA[ Discord ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 机器人 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ luojiyin ]]>
                </dc:creator>
                <pubDate>Mon, 09 May 2022 07:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/05/1_NlqpTTAM8DbGl4paBmjE_g.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/create-a-discord-bot-with-python/">Python Discord Bot Tutorial – Code a Discord Bot And Host it for Free</a>，作者：<a href="https://www.freecodecamp.org/news/author/beau/">Beau Carnes</a></p><!--kg-card-begin: markdown--><p>本教程将告诉你如何完全在云端建立你自己的 Discord 机器人。</p>
<p>你不需要在你的电脑上安装任何东西，也不需要支付任何费用来托管你的机器人。</p>
<p>我们将使用一些工具，包括 Discord API、Python 库和一个名为 <a href="https://www.repl.it">Repl.it</a> 的云计算平台。</p>
<p>这个书面教程也有一个<a href="https://www.youtube.com/watch?v=SPTfmiYiuok&amp;feature=emb_imp_woyt">视频版本</a>。</p>
<h2 id="discordbot">如何创建一个 Discord Bot 账户</h2>
<p>为了使用 Python 库和 Discord API，我们必须首先创建一个 Discord Bot 账户。</p>
<p>以下是创建 Discord Bot 账户的步骤。</p>
<ol>
<li>
<p>确保你已经登录到 <a href="https://discord.com">Discord 网站</a></p>
</li>
<li>
<p>进入<a href="https://discord.com/developers/applications">应用程序页面</a></p>
</li>
<li>
<p>点击 <code>New Application</code> 按钮</p>
</li>
</ol>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-117.png" alt="image-117" width="600" height="400" loading="lazy"></p>
<ol start="4">
<li>给应用程序一个名称，然后点击 <code>Create</code> 按钮</li>
</ol>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-118.png" alt="image-118" width="600" height="400" loading="lazy"></p>
<ol start="5">
<li>进入 <code>Bot</code> 标签，然后点击 <code>Add Bot</code>。你必须点击 <code>Yes, do it!</code></li>
</ol>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-119.png" alt="image-119" width="600" height="400" loading="lazy"></p>
<p>保持默认设置 <strong>Public Bot</strong>（选中）和 <strong>Require OAuth2 Code Grant</strong>（未选中）。</p>
<p>你的机器人已经创建完毕。下一步是复制令牌（token）。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-122.png" alt="image-122" width="600" height="400" loading="lazy"></p>
<p>这个令牌是你的机器人的密码，所以不要与任何人分享它。它可以让别人登录到你的机器人并做各种坏事。</p>
<p>如果不小心被分享，你可以重新生成令牌。</p>
<h2 id="">如何邀请你的机器人接入一个服务器</h2>
<p>现在你必须让你的机器人用户接入一个服务器。要做到这一点，你应该为它创建一个邀请 URL。</p>
<p>转到 <code>OAuth2</code> 标签。然后在 <code>scopes</code> 部分选择 <code>bot</code>。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-123.png" alt="image-123" width="600" height="400" loading="lazy"></p>
<p>现在为机器人选择你想要的权限。我们的机器人将主要使用文本信息，所以我们不需要很多的权限。你可能需要更多的权限，这取决于你希望你的机器人做什么。对 <code>Administrator</code> 的权限要小心。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-124.png" alt="image-124" width="600" height="400" loading="lazy"></p>
<p>选择适当的权限后，点击权限上方的 <code>copy</code> 按钮。这将复制一个 URL，可用于将机器人添加到一个服务器。</p>
<p>把这个 URL 粘贴到你的浏览器，选择一个服务器来接入机器人，然后点击 <code>Authorize</code>。</p>
<p>要添加机器人，你的账户需要 <code>Manage Server</code> 的权限。</p>
<p>现在你已经创建了机器人用户，我们将开始为机器人编写 Python 代码。</p>
<h2 id="discordpydiscord">如何用 discord.py 库编写一个基本的 Discord 机器人代码</h2>
<p>我们将使用 discord.py， 这个 Python 库来编写机器人的代码。discord.py 是 Discord 的一个 API 封装器，使在 Python 中更容易创建一个 Discord 机器人。</p>
<h3 id="repldiscordpy">如何创建一个 Repl 项目并安装 discord.py</h3>
<p>你可以在你的本地电脑上用任何代码编辑器开发机器人。然而，在本教程中，我们将使用 Repl.it，因为它操作起来比较简便。Repl.it 是一个在线 IDE，你可以在你的网络浏览器中使用。</p>
<p>首先进入 <a href="https://repl.it">Repl.it</a>。创建一个新的 Repl，选择 <code>Python</code> 作为语言。</p>
<p>要使用 discord.py 库，只要在 <code>main.py</code> 的顶部写上 <code>import discord</code>。当你按下 <code>run</code> 按钮时，Repl.it 会自动安装这个依赖。</p>
<p>如果你喜欢在本地编码机器人，你可以在 MacOS 上使用这个命令来安装 discord.py：</p>
<p><code>python3 -m pip install -U discord.py</code></p>
<p>你可能需要使用 <code>pip3</code> 而不是 <code>pip</code>。</p>
<p>如果你使用的是 Windows，那么你应该使用下面一行代码：</p>
<p><code>py -3 -m pip install -U discord.py</code></p>
<h3 id="discord">如何为你的机器人设置 Discord 事件</h3>
<p>discord.py 基于事件的概念。一个事件是你监听的东西，然后对其作出回应。例如，当一条消息发生时，你会收到一个关于它的事件，你可以对其作出回应。</p>
<p>让我们做一个机器人，回复一个特定的消息。这个简单的机器人代码，以及代码解释，来自于<a href="https://discordpy.readthedocs.io/en/latest/quickstart.html#a-minimal-bot">the discord.py documentation</a>。我们将在以后为机器人添加更多的功能。</p>
<p>将这段代码添加到 main.py 中。如果你愿意，你可以给这个文件起个别的名字，但不要叫 discord.py。我很快会解释这些代码的作用。</p>
<pre><code class="language-python">import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(os.getenv('TOKEN'))
</code></pre>
<p>当你在 Discord 上创建你的机器人用户时，你复制了一个令牌。现在我们要创建一个 <code>.env</code> 文件来存储该令牌。如果你在本地运行你的代码，你不需要 <code>.env</code> 文件。只要用令牌替换 <code>os.getenv('TOKEN')</code> 就可以了。</p>
<p><code>.env</code> 文件是用来声明环境变量的。在 Repl.it 上，你创建的大多数文件对任何人都是可见的，但 <code>.env</code> 文件只对你可见。 其他人将无法看到公共 repl 里的<code>.env</code>文件的内容。</p>
<p>因此，如果你在 Repl.it 上开发，应该只在 <code>.env</code> 文件中存储私人信息，如令牌或密钥。</p>
<p>点击 <code>Add file</code>按钮，创建一个名为 <code>.env</code> 的文件。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-19-1.png" alt="image-19-1" width="600" height="400" loading="lazy"></p>
<p>在文件中添加以下一行，包括你之前复制的令牌（token）：</p>
<pre><code class="language-python">TOKEN=[paste token here]
</code></pre>
<p>现在让我们来看看每一行代码在你的 Discord 机器人中的作用是什么。</p>
<ol>
<li>第一行是导入 discord.py 库。</li>
<li>第二行导入 os 库，但这只是用于从 <code>.env</code> 文件中获取 <code>TOKEN</code> 变量。如果你不使用 <code>.env</code> 文件，你不需要这一行。</li>
<li>接下来，我们创建一个 <a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client"><code>Client</code></a> 的实例。这是与 Discord 的连接。</li>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.event">@client.event()</a> 装饰器被用来注册一个事件。这是一个异步库，所以事情是通过回调完成的。回调是一个当其他事情发生时被调用的函数。在这段代码中，当机器人准备开始使用时，<a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_ready">on_ready()</a> 事件被调用。然后，当机器人收到一个消息时，<a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_message">on_message()</a> 事件被调用。</li>
<li><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_message">on_message()</a> 事件在每次收到消息时都会触发，但如果消息是来自我们自己，我们不希望它做任何事情。因此，如果<a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.author">Message.author</a> 与 <a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.user">Client.user</a> 相同，代码只是返回。</li>
<li>接下来，我们检查 <a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.content"><code>Message.content</code></a> 是否以 <code>$hello</code> 开头。如果是，那么机器人就会向它所使用的频道回复 <code>Hello!</code>。</li>
<li>现在机器人已经设置好了，最后一行是用登录令牌运行机器人。它从 <code>.env</code> 文件中获取令牌。</li>
</ol>
<p>我们有了机器人的代码，现在我们只需要运行它。</p>
<h3 id="">如何运行机器人</h3>
<p>现在点击上面的 <code>run</code> 按钮，在 repl.it 中运行你的机器人。</p>
<p>如果你是在本地编写机器人，你可以在终端使用下面这些命令来运行该机器人。</p>
<p>在 Windows 系统：</p>
<p><code>py -3 main.py</code></p>
<p>在别的系统：</p>
<p><code>python3 main.py</code></p>
<p>现在去你的 Discord 房间，输入<code>$hello</code>。你的机器人应该返回 <code>Hello</code>。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-141.png" alt="image-141" width="600" height="400" loading="lazy"></p>
<h2 id="">如何改进机器人</h2>
<p>现在我们有了一个基本的机器人工作，我们将改进它。它被称为 <code>鼓励机器人</code> 是有原因的。</p>
<p>每当有人发来含有悲伤或压抑字眼的信息时，这个机器人就会以鼓励的信息来回应。</p>
<p>任何人都可以为机器人添加鼓励信息，用户提交的信息将被储存在 Repl.it 数据库中。</p>
<p>当有人在聊天中输入 <code>$inspire</code> 信息时，机器人也会从 API 中随机返回一句鼓舞人心的话。</p>
<p>我们将从添加 <code>$inspire</code> 功能开始。</p>
<h3 id="">如何在机器人上添加鼓舞人心的名言</h3>
<p>我们将从一个名为 zenquotes.io 的 API 中获得鼓舞人心的语录。我们需要再导入几个 Python 模块，添加一个<code>get_quote()</code>函数，并更新我们的机器人代码以调用该函数。</p>
<p>下面是更新后的代码。在代码之后，我将解释新的部分。</p>
<pre><code class="language-python">import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))
</code></pre>
<p>我们现在必须导入 <code>requests</code> 模块。这个模块允许我们的代码进行 HTTP 请求，从 API 获得数据。API 返回 JSON，所以 <code>json</code> 模块使我们更容易处理返回的数据。</p>
<p><code>get_quote()</code> 函数是非常简单的。首先，它使用 requests 模块从 API URL 请求数据。API 会返回一个随机的鼓舞人心的引言。如果当前的 API 停止工作，这个函数可以很容易地被重写，以从不同的 API 获得引言。</p>
<p>接下来在这个函数中，我们使用 <code>json.load()</code> 将 API 的响应转换为 JSON。通过试验和错误，我找到了如何将 JSON 中的引言转换成我想要的字符串格式。引言被作为一个字符串从函数中返回。</p>
<p>代码中最后更新的部分是在最后。以前，它寻找以 <code>$hello</code> 开头的信息。现在它寻找的是 <code>$inspire</code>。它不再返回 <code>Hello!</code>，而是用 <code>quote = get_quote()</code> 来获取引言，并返回引言。</p>
<p>在这一点上，你可以运行你的代码并尝试一下。</p>
<h2 id="">如何向机器人添加鼓励性的信息</h2>
<p>现在我们要实现的功能是，当用户发布带有悲伤字眼的信息时，机器人会以鼓励性的信息进行回应。</p>
<h3 id="">如何在机器人中添加悲伤的词语</h3>
<p>首先，我们需要创建一个 Python 列表，其中包含机器人将回应的悲伤的词语。</p>
<p>在创建<code>client</code>变量后添加以下一行:</p>
<p><code>sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]</code></p>
<p>请随意在列表中添加更多的单词。</p>
<h3 id="">如何向机器人添加鼓励性的信息</h3>
<p>现在我们将添加一个鼓励性的信息列表，机器人将用这些信息来回应。</p>
<p>在你创建的<code>sad_words</code>列表后面添加以下列表:</p>
<pre><code class="language-python">starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]
</code></pre>
<p>像以前一样，请随时在列表中添加更多你选择的短语。我现在只使用三个项目，因为以后我们会增加用户添加更多鼓励性短语的能力，供机器人使用。</p>
<h3 id="">如何回复留言</h3>
<p>现在我们需要更新我们的机器人来使用我们创建的两个列表。首先，导入随机模块，因为机器人将随机选择鼓励信息。在代码顶部的导入语句中添加以下一行。<code>import random</code>。</p>
<p>现在我们将更新<code>on_message()</code>函数，以检查所有信息，看它们是否包含<code>sad_words</code>列表中的一个词。如果发现一个悲伤的词，机器人将发送一条随机的鼓励信息。</p>
<p>以下是更新后的代码：</p>
<pre><code class="language-python">async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)
    
  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(starter_encouragements))
</code></pre>
<p>这是一个测试机器人的好时机。你现在知道的足够多，可以创建你自己的机器人。但接下来你将学习如何实现更高级的功能，并使用 Repl.it 数据库存储数据。</p>
<h3 id="">如何启用用户提交信息</h3>
<p>这个机器人是完全正常的，但现在让我们从 Discord 中直接更新机器人。用户应该能够添加更多的鼓励性信息，以便机器人在检测到一个悲伤的词时使用。</p>
<p>我们将使用 Repl.it 的内置数据库来存储用户提交的信息。这个数据库是一个键值存储，内置于每个 Repl.it 中。</p>
<p>在代码的顶部，在其他导入语句下，添加 <code>from replit import db</code>。这将使我们能够使用 Repl.it 数据库。</p>
<p>用户将能够直接从 Discord 聊天中为机器人添加自定义鼓励信息。在我们为机器人添加新的命令之前，让我们创建两个辅助函数，将自定义消息添加到数据库并删除它们。</p>
<p>在 <code>get_quote()</code> 函数后添加以下代码:</p>
<pre><code class="language-python">def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) &gt; index:
    del encouragements[index]
  db["encouragements"] = encouragements
</code></pre>
<p><code>update_encouragements()</code>函数接受一个鼓励信息作为参数。</p>
<p>首先，它检查 <code>encouragements</code> 是否是数据库中的一个键（key）。如果是，它将获得已经在数据库中的鼓励信息列表，将新的鼓励信息添加到列表中，并将更新的列表存储在数据库中的 <code>encouragements</code> 键下。</p>
<p>如果数据库中还没有 <code>encouragements</code>，就用这个名字创建一个新的键，并将新的鼓励信息作为列表中的第一个元素加入。</p>
<p><code>delete_encouragement()</code> 函数接受一个索引作为参数。</p>
<p>它从数据库中获取存储在 <code>encouragements</code> 键下的鼓励信息列表。如果鼓励列表中的项目数量大于索引，则删除该索引处的列表项。</p>
<p>最后，更新后的列表被存储在数据库的 <code>encouragements</code> 键下。</p>
<p>下面是 <code>on_message()</code> 函数的更新代码。在代码之后，我将解释新的部分。</p>
<pre><code class="language-python">async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content
 
  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  options = starter_encouragements
  if "encouragements" in db.keys():
    options = options + db["encouragements"]

  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)
</code></pre>
<p>上面的第一行新代码是 <code>options = starter_encouragements</code>。我们复制了变量 <code>starter_encouragements</code>的值，因为我们要把用户提交的信息添加到该列表中，然后再为机器人选择一条随机信息来发送。</p>
<p>我们检查 <code>encouragements</code> 是否已经在数据库键中（意味着用户已经提交了至少一条自定义消息）。如果是的话，我们就把用户信息添加到启动器的鼓励信息中。</p>
<p>然后，机器人现在不是从 <code>starter_encouragements</code> 中随机发送消息，而是从 <code>options</code> 中随机发送消息。</p>
<p>下一段新的代码是将用户提交的新消息添加到数据库中。如果一条 Discord 信息以 <code>$new</code>开头，那么 <code>$new</code> 之后的文字将被用作新的鼓励信息。</p>
<p>代码<code>msg.split("$new",1)[1]</code>从 <code>$new</code> 命令中分离出信息，并将该信息存储在一个变量中。在这行代码中，注意"$new "中的空格。我们要的是空格之后的所有内容。</p>
<p>我们调用 <code>update_encouragements</code> 辅助函数处理新消息，然后机器人向 discord 聊天室发送一条消息，确认消息被添加。</p>
<p>第三个新部分（在上面代码的末尾）检查新的 discord 消息是否以<code>$del</code> 开头。这是删除数据库中 <code>encouragements</code> 列表中的一个项目的命令。</p>
<p>首先，一个名为 <code>encouragements</code> 的新变量被初始化为一个空数组。这样做的原因是，如果数据库中不包括 <code>encouragement</code> 键，这部分代码将发送一个空数组的信息。</p>
<p>如果 <code>encouragement</code> 键在数据库中，索引将从以 <code>$del</code> 开始的 Discord 消息中分离出来。然后，调用<code>delete_encouragement()</code>函数，传入要删除的索引。更新的鼓励列表被加载到 <code>encouragements</code> 变量中，然后机器人向 Discord 发送一条带有当前列表的消息。</p>
<h2 id="">最后要添加机器人的功能</h2>
<p>该机器人应该可以工作，所以现在是测试它的好时机。我们现在将添加一些最后的功能。</p>
<p>我们将增加从 Discord 中直接获得用户提交的信息列表的功能，并且我们将增加关闭和开启机器人是否对伤心话做出反应的功能。</p>
<p>我将给你们提供程序的全部最终代码，然后我将在下面讨论更新的代码。</p>
<pre><code class="language-python">import discord
import os
import requests
import json
import random
from replit import db

client = discord.Client()

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

if "responding" not in db.keys():
  db["responding"] = True

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]["q"] + " -" + json_data[0]["a"]
  return(quote)

def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) &gt; index:
    del encouragements[index]
  db["encouragements"] = encouragements

@client.event
async def on_ready():
  print("We have logged in as {0.user}".format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  if db["responding"]:
    options = starter_encouragements
    if "encouragements" in db.keys():
      options = options + db["encouragements"]

    if any(word in msg for word in sad_words):
      await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)

  if msg.startswith("$list"):
    encouragements = []
    if "encouragements" in db.keys():
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)
    
  if msg.startswith("$responding"):
    value = msg.split("$responding ",1)[1]

    if value.lower() == "true":
      db["responding"] = True
      await message.channel.send("Responding is on.")
    else:
      db["responding"] = False
      await message.channel.send("Responding is off.")

client.run(os.getenv("TOKEN"))
</code></pre>
<p>添加到代码中的第一个部分就在 <code>starter_encouragements</code> 列表下面：</p>
<pre><code class="language-python">if "responding" not in db.keys():
  db["responding"] = True
</code></pre>
<p>我们在数据库中创建一个名为 <code>responding</code> 的新键，并将其设置为 <code>true</code>。我们将用它来决定机器人是否应该对悲伤的话语做出反应。由于数据库即使在程序停止运行后也会被保存，所以我们只在新键不存在的情况下创建它。</p>
<p>代码的下一个新部分是，对伤心话做出反应的部分现在在这个 if 语句里面：<code>if db["responding"]:</code>。只有当<code>db["responing"] = True</code>时，机器人才会对悲伤的词语做出反应。更新这个值的动作是在下一节之后。</p>
<p>接下来，在使机器人响应 <code>$del</code> 命令的代码之后，有新的代码来响应作为 Discord 消息发送的 <code>$list</code> 命令。</p>
<p>这一部分首先是创建一个名为 <code>encouragements</code> 的空列表。然后，如果数据库中已经有鼓励语（encouragements），这些鼓励语将取代刚刚创建的空列表。</p>
<p>最后，机器人将鼓励（encouragements）列表作为 Discord 消息发送出去。</p>
<p>接下来是最后的新部分。这段代码使机器人对 <code>$responding</code> 命令作出反应。这个命令的参数是 <code>true</code> 或 <code>false</code>。下面是一个使用例子。<code>$responding true</code>。</p>
<p>代码首先用<code>value = msg.split("$responding",1)[1]</code> 获得一个值（和前面一样，注意<code>"$responding"</code>的空格）。然后有一个 if/else 语句，适当地设置数据库中的 <code>responding</code> 键，并向 Discord 发送一个通知信息。如果参数不是 <code>true</code>，代码就假定为 <code>false</code>。</p>
<p>该机器人的代码已经完成！你现在可以运行机器人并试用它了。但还有一个重要的步骤，我们接下来会讨论。</p>
<h2 id="">如何设置机器人连续运行</h2>
<p>如果你在 repl.it 中运行你的机器人，然后关闭它所运行的标签，你的机器人将停止运行。</p>
<p>但有两种方法可以让你的机器人持续运行，即使在你关闭你的网络浏览器之后。</p>
<p>第一个方法和最简单的方法是在 Repl.it 注册付费计划。他们最便宜的付费计划被称为黑客计划，它包括五个永远在线的 repls 项目。</p>
<p>你可以通过这个链接获得三个月的免费服务（限于前 1000 人）：&nbsp;<a href="https://repl.it/claim?code=tryalwayson2103">https://repl.it/claim?code=tryalwayson2103</a></p>
<p>当你注册了该计划，打开你的 Repl，点击顶部的项目名字。然后选择 <code>Always On</code> (永久在线) 选项。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-35-1.png" alt="image-35-1" width="600" height="400" loading="lazy"></p>
<p>还有一种方法可以使你的代码保持运行，即使是在免费计划，但它有点复杂。Repl.it 在标签关闭之后。但即使是网络服务器，也只能在没有任何使用的情况下运行一个小时。</p>
<p>下面是 repl.it 文档中的内容：</p>
<blockquote>
<p>当部署完，服务器将继续在后台运行，甚至在你关闭浏览器标签之后。服务器将保持运行和活跃，直到最后一次请求后一个小时，之后它将进入睡眠阶段。睡眠中的 Repls 一旦收到一个请求就会被唤醒；不需要重新运行。然而，如果你对你的服务器做了修改，你将需要重新启动 repl，以便看到这些修改反映在新版本中。</p>
</blockquote>
<p>为了保持机器人的持续运行，我们将使用另一项免费的服务，叫做 <a href="https://uptimerobot.com/">Uptime Robot</a>。</p>
<p>Uptime Robot 可以被设置为每 5 分钟 ping 一次在 repl.it 上机器人的网络服务器。有了持续的 ping，机器人将永远不会进入睡眠阶段，而会一直运行。</p>
<p>因此，我们必须再做两件事来使我们的机器人持续运行：</p>
<ol>
<li>在 repl.it 中创建一个网络服务器，然后</li>
<li>设置 Uptime Robot，以持续地 ping 该 Web 服务器。</li>
</ol>
<h3 id="replitweb">如何在 repl.it 中创建一个 Web 服务器</h3>
<p>创建一个网络服务器比你想象的要简单。</p>
<p>要做到这一点，在你的项目中创建一个新的文件，叫做 <code>keep_alive.py</code>。</p>
<p>然后添加以下代码:</p>
<pre><code class="language-python">from flask import Flask
from threading import Thread

app = Flask('')

@app.route('/')
def home():
    return "Hello. I am alive!"

def run():
  app.run(host='0.0.0.0',port=8080)

def keep_alive():
    t = Thread(target=run)
    t.start()
</code></pre>
<p>在这段代码中，我们使用 Flask 来启动一个网络服务器。该服务器向访问它的人返回 “Hello. I am alive.” 给任何访问它的人。该服务器将在与我们的机器人分开的线程上运行。我们不会在这里讨论所有的东西，因为其他的东西与我们的机器人并不相关。</p>
<p>现在我们只需要机器人来运行这个网络服务器。</p>
<p>在 <code>main.py</code> 的顶部添加以下一行来导入服务器。</p>
<pre><code class="language-python">from keep_alive import keep_alive
</code></pre>
<p>要在运行 <code>main.py</code> 时启动网络服务器，请在机器人运行前的倒数第二行添加以下一行。</p>
<p><code>keep_alive()</code></p>
<p>当你加入这段代码后在 repl.it 上运行机器人时，一个新的 Web 服务器窗口将被打开。这里有一个网络服务器的 URL。复制这个 URL，这样你就可以在下一节中使用它。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-20-1.png" alt="image-20-1" width="600" height="400" loading="lazy"></p>
<h3 id="">如何设置机器人运行</h3>
<p>现在，我们需要设置 Uptime Robot，使其每隔 5 分钟就对网络服务器进行一次 ping。这将使机器人持续运行。</p>
<p>在 <a href="https://uptimerobot.com/">https://uptimerobot.com/</a> 上创建一个免费账户。</p>
<p>一旦你登录到你的账户，点击 “Add New Monitor”。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-21-1.png" alt="image-21-1" width="600" height="400" loading="lazy"></p>
<p>对于新的监控器（monitor），选择 “HTTP(s)” 作为监控器类型，并命名为你喜欢的任何名字。然后，从 repl.it 中粘贴你的网络服务器的 URL。最后，点击 “Create Monitor”。</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-22-1.png" alt="image-22-1" width="600" height="400" loading="lazy"></p>
<p>我们完成了！现在，这个机器人将持续运行，所以人们可以一直在 Repl.it 上 与它互动。</p>
<h2 id="">结语</h2>
<p>你现在知道如何用 Python 创建一个 Discord 机器人，并在云上持续运行。</p>
<p>discord.py 库还可以做很多其他的事情。因此，如果你想让 Discord 机器人拥有更多的功能，你的下一步是查看 <a href="https://discordpy.readthedocs.io/en/latest/index.html">discord.py 文档</a></p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
