如何将 discord.js 机器人部署到 Cloud Functions?

Posted

技术标签:

【中文标题】如何将 discord.js 机器人部署到 Cloud Functions?【英文标题】:How can I deploy a discord.js bot to Cloud Functions? 【发布时间】:2020-03-02 23:42:59 【问题描述】:

我想将在 discord.js 上运行的 Discord 机器人部署到 Firebase Cloud Functions,但我无法让机器人在 Firebase 中运行。如果我使用 nodemon 它运行完美,但如果我使用 firebase deploy 它不会启动机器人。

这是我当前的代码:

const functions = require('firebase-functions');

require('dotenv').config();
const token = process.env.TOKEN

const Discord = require('discord.js')
const Client = new Discord.Client();

Client.on('ready', () => 
    Client.channels.find(x => x.name === 'main-cannel').send('bot is deployed')
    Client.user.setGame(`The Cult | $Client.guilds.size servers`)
    Console.log('test')
);

Client.login(token);

//is is not working but de basic
//export.App = functions.... Client
exports.app = functions.https.onRequest((request, response) => 
    response.send("Test");
);

【问题讨论】:

是否有任何错误信息?你是怎么开始的?这里需要更多信息。 对不起@ThomasReichmann 如果我运行 nodemon app.js 它运行但如果我执行 firebase deploy --only 功能它没有运行 没有人可以帮助我解决这个问题吗^^ ?? 部署代码时会发生什么? 【参考方案1】:

client.login(token) 放入response.send("Test"); 所在的位置。这将提示您的机器人代码根据 HTTP 请求执行。

https://us-central1-<your project ID>.cloudfunctions.net/app 中,将 <your project ID> 替换为您的项目 ID。

如果 Firebase 托管为您提供 URL example-123.web.app,则您的项目 ID 为 example-123。您也可以通过控制台获取您的项目 ID:打开 Firebase 控制台,选择您的项目,点击设置图标,进入“项目设置”,其 ID 位于表格的第二行。

为此,您必须将令牌直接移动到代码中。你不能使用像 .env 这样的 shell 文件。

最后,您的代码将是:

const functions = require('firebase-functions');
const token = 'whatever the token is';
const Discord = require('discord.js')
const Client = new Discord.Client();

Client.on('ready', () => 
    Client.channels.find(x => x.name === 'main-cannel').send('bot is deployed')
    Client.user.setGame(`The Cult | $Client.guilds.size servers`)
    Console.log('test')
);

exports.app = functions.https.onRequest((request, response) => 
    response.send("Test"); // Do not delete this! Your request will time out if you do.
    Client.login(token);
);

正如 Gabber235 所说,这可能不是最好的 Google Cloud Platform 服务,您应该使用 Compute Engine。

【讨论】:

如果可能,请努力提供额外的解释,而不仅仅是代码。此类答案往往更有用,因为它们可以帮助社区成员,尤其是新开发人员更好地理解解决方案的推理,并有助于避免需要解决后续问题。【参考方案2】:

这可能不是谷歌云平台服务的最佳组合,因为云功能在设计时并未考虑到这一点。您可以将 Discord 机器人托管在计算引擎机器上。

如果您想使用动态扩展,请查看Discord Microservice Bots,DasWolke 描述了微服务是什么。嘿还包括他的 javascript 代码来为 Discord 拆分不同的服务。

具体而言,您可以在 Google 云平台上做的是创建一个运行 Gateway 的 VM。这需要 24/7 全天候运行并且应该是轻量级的。您可以为此使用 f1-micro(免费),尽管 google 推荐使用 g1-small 来完成该任务。

网关应该过滤你正在寻找的事件(因为 Discord 发送的事件很多,而你最不需要)并将数据发送到cloud function 或cloud run(你可以通过@987654325 发送数据@)。根据我的经验,云运行的启动时间要短得多,所以我选择了它。

在您的函数中,您接收到的数据可以随心所欲地处理。如果您想要 Discord 中的某些内容(发送消​​息、管理频道……),您可以使用 SnowTransfer。 SnowTransfer 只是在 discord 上调用其余的 API。

【讨论】:

以上是关于如何将 discord.js 机器人部署到 Cloud Functions?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 discord.js 中使用 FS 将richEmbed 保存到文件中?

discord.js 如何将检测到的内存泄漏发送到通道?

我将如何使用两个不同版本的 discord.js | Discord.js 机器人

Discord.js 如何创建机器人状态公告?

Discord.js 机器人 | Heroku 部署错误 | npm 错误!缺少脚本:开始

Heroku 部署错误不允许 Discord.js 机器人在线出现 [NPM_CONFIG_LOGLEVEL=error]