问题描述
我正在使用 node-telegram-bot-api 制作电报机器人,一切正常,直到命令列表变得很长为止。在初始化了bot的单个.js文件中提供许多命令并不方便。
我了解 module.exports 的一项基本功能,使用该功能我可以将服务功能移动到不同的文件中,但这仍然不是我的想法。
在构建html页面(基本)时,您可以通过 标记添加javascript文件,这是您将很少的脚本加载到页面上的一大原因。使用PHP时,可以使用 require 或 include 将其他脚本插入到主脚本中。最后,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')
我已经检查过APIs of node-telegram-bot-api,但没有找到类似的内容,但是
P.S .:是的,我是NodeJS的新手,所以明白这个问题听起来很愚蠢。是的,我只知道javascript的基础知识。但是我不知道该怎么做,也不确定我的问题表达是否正确,因此感谢所有愿意在需要时进行纠正的人。
解决方法
您可以创建一个单独的模块(例如 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');