0

我正在用node-telegram-bot-api制作电报机器人,一切都很好,直到命令列表变得很长。在初始化 bot 的单个 .js 文件中提供许多命令是不舒服的。

我了解module.exports的一件事,使用它我可以将服务功能移动到不同的文件,但这仍然不是我想要的。

当您构建 html 页面(基本)时,您可以通过以下方式添加您的 javascript 文件标签,这就是你如何在页面上加载很少的脚本作为一件大事。当您使用 PHP 时,您可以使用requireinclude将其他脚本插入到主脚本中。最后 Express.js 允许制作外部路由器模块,并在主脚本中使用它,就像expressApp.use(myRouterModule).

这就是我试图找到的方法。制作一些结构,当按任何类别分组的少数命令将被放置到不同的 .js 文件中并使用类似mybot.useCommands(CommandGroup1,CommandGroup2)

CommandGroup1.js将包含:

bot.onText(/\/start/,function(msg){...})
bot.onText(/\/echo/,function(msg){...})

另一个TestGroup.js将包含

bot.onText(/\/test1/,function(msg){...})
bot.onText(/\/AnotherTest/,function(msg){...})

并且主app.js将使用这两个文件,其中包含事件侦听器

var bot = new TelegramBot(token, { polling: true });

includeHere('./CommandGroup1.js')
includeHere('./TestGroup.js')

我检查了 node-telegram-bot-api 的 API,但没有找到类似的东西,但是

  • 可能是我的搜索不正确(关键字不正确,对描述的误解)
  • 可能是 NodeJS 运行时允许 JavaScript 包含外部 .js 文件作为代码的一部分,但不能作为变量的值

PS:是的,我是 NodeJS 的新手,我知道这个问题可能听起来很愚蠢。是的,我只知道 javascript 的基础知识。但是我不知道怎么做,也不确定我的问题是否正确,所以感谢所有在需要时帮助纠正的人。

4

1 回答 1

2

您可以创建一个单独的模块(例如bot.js)将机器人对象导出为单例,并且在包含命令/侦听器/处理程序的每个其他文件中,您只需要导入机器人的相同实例。

例如,在bot.js

const TelegramBot = require('node-telegram-bot-api');
const bot = new TelegramBot(token, { polling: true });
module.exports = bot;

CommandGroup1.js

const bot = require('./bot');
bot.onText(/\/start/,function(msg){...});
bot.onText(/\/echo/,function(msg){...});

TestGroup.js

const bot = require('./bot');
bot.onText(/\/test1/,function(msg){...});
bot.onText(/\/AnotherTest/,function(msg){...});

app.js

require('./CommandGroup1');
require('./TestGroup');
于 2021-01-17T08:30:24.527 回答