node.js - 如何将 discord.js 机器人部署到 Cloud Functions?
问题描述
我想将在 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");
});
解决方案
这可能不是谷歌云平台服务的最佳组合,因为云功能在设计时并未考虑到这一点。您可以将 Discord 机器人托管在计算引擎机器上。
如果您想使用动态扩展,请查看Discord Microservice Bots,其中 DasWolke 描述了微服务是什么。Hey 还包括了他的 javascript 代码来为 Discord 划分不同的服务。
具体而言,您可以在 Google 云平台上做的是创建一个运行网关的 VM 。这需要 24/7 全天候运行并且应该是轻量级的。您可以为此使用 f1-micro(免费),尽管 google 推荐使用 g1-small 来完成该任务。
网关应该过滤你正在寻找的事件(因为 Discord 发送了很多事件,而你不需要最多)并将数据发送到云功能或云运行(你可以通过pub/sub发送数据)。根据我的经验,云运行的启动时间要短得多,所以我就这么做了。
在您的函数内部,您会收到数据,并按照您的意愿使用它。如果您想要 Discord 中的某些内容(发送消息、管理频道……),您可以使用SnowTransfer。SnowTransfer 只是在 discord 上调用其余的 API。
推荐阅读
- tensorflow - 如何在 Keras 中实现屏蔽的 softmax 交叉熵损失函数?
- c# - 为什么作为消息发送后 DateTime 变量的默认值会更改?
- c - 如何停止输入换行符
- flutter - 多个颤振模拟器实例
- amazon-web-services - 外部视图查询在 athena 控制台中工作,但在 aws quicksight 中使用时无法工作
- python - 使用循环绘制具有自定义线格式的大型数据集的强大解决方案
- c++ - 在 OMNET++ 中接收到上一个模块的所有消息后如何将一个消息发送到下一个模块
- r - 基于多个条件创建新变量的问题
- typescript - 使用引用将打字稿文件加载到另一个打字稿文件中
- javascript - 有没有办法按类过滤所有以前的元素?