因此,我正在尝试构建Discord机器人。这些类型的线程在stackoverflow上往往会被低估,所以我希望这不会发生在我身上。
此特殊功能是我的仪表板问题的临时解决方案。由于glitch.com's托管的性质,http闲置5分钟后应该可以入睡。我已经通过添加一个脚本来解决此问题,该脚本每4分钟ping通URL,但这引起了另一个问题。我认为发生的事情是因为该脚本和bot脚本一直在运行,并且从技术上讲从来没有“完成”,所以它永远不会让任何传入的连接实际加载网页。因此,针对该问题的解决方案是创建一个另一个故障项目,该项目将充当仪表板网站,并从bot项目中传输信息。当然,那我需要创建更多的脚本,这些脚本通过某种Internet协议相互通信。机器人记录的信息都使用node-json-db npm库记录在私有JSON数据库中。
我的问题是:我不知道哪种协议最适合这种情况。即使我确实知道,也必须仔细阅读文档以查找所需的信息。
我的问题是:应该使用什么协议,为此需要阅读什么文档?
我在此处包括了一些代码片段:
机器人的服务器代码(我将在其中添加用于与仪表板通信的脚本):
// server.js
// where your node app starts
// init project
const express = require('express');
const app = express();
const JsonDB = require('node-json-db');
const db = new JsonDB("myDataBase", true, true);
// we've started you off with Express,
// but feel free to use whatever libs or frameworks you'd like through `package.json`.
// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));
// http://expressjs.com/en/starter/basic-routing.html
app.get('/', function(request, response) {
response.sendFile(__dirname + '/views/index.html');
});
app.post('/login/c3RvcCBoYWNrZXIh', function(request, response) {
var servername = request.param('servername');
var password = request.param('password');
if (db.getData("/" + servername + "/password") === password) {
response.json(db.getData("/" + servername));
} else {
response.json(null);
}
});
// listen for requests :)
const listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});
// to keep the bot alive, since glitch puts projects to sleep after 5 mins of inactivity.
const http = require('http');
setInterval(() => {
http.get(`http://${process.env.PROJECT_DOMAIN}.glitch.me/`);
}, 270000);
信息中心网站上的server.js:
// server.js
// where your node app starts
// init project
const express = require('express');
const app = express();
const request = require('request');
// we've started you off with Express,
// but feel free to use whatever libs or frameworks you'd like through `package.json`.
// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));
// http://expressjs.com/en/starter/basic-routing.html
app.get('/', function(request, response) {
response.sendFile(__dirname + '/views/index.html');
});
app.post('/login', function(request, response) {
var servername = request.param('servername');
var password = request.param('password');
if ("thereisnopassword" === password) {
response.sendFile(__dirname + '/dashboard/index.html');
} else {
response.sendFile(__dirname + '/views/wronginfo.html');
}
});
// listen for requests :)
const listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});
答案 0 :(得分:1)
我也有这个,但是通过简单地将代码放在http循环之前启动Express服务器来解决它。
// Require packages
const http = require('http');
const express = require('express');
const app = express();
// Express
app.get("/", (request, response) => {
response.sendStatus(200);
});
app.listen(process.env.PORT);
// Interval
setInterval(() => {
http.get(`http://${process.env.PROJECT_DOMAIN}.glitch.me/`);
}, 240000);
// Bot code
const Discord = require('discord.js');
const client = new Discord.Client();