Как переслать сообщение с канала в группы в telegram-боте?

#node.js #telegram #telegram-bot

#node.js #telegram #telegram-бот

Вопрос:

я пытаюсь реализовать функцию моего бота. Функция, которая, если канал напишет какое-либо сообщение, оно будет перенаправлено в группы, где бот уже есть.

Пытаюсь использовать метод scope, который сработал как заклинание в приветственном сообщении, когда новый пользователь присоединился к группе.

 //index.js

const Telegram = require('telegram-node-bot'),

tg = new Telegram.Telegram('MYAPI', {
workers: 1
});

const ForwardController = require('./controllers/forward')

tg.router.when(new Telegram.TextCommand('/info', 'infoCommand'), new InfoController())
.otherwise(new ForwardController());

//forward.js

const Telegram = require('telegram-node-bot');

class ForwardController extends Telegram.TelegramBaseController {
handle(scope) {
    if ('channel' == scope.message.chat._type) {
        scope.api.forwardMessage(scope.message._chat._id, _forwardFromChat._text);
      }
   }
}

module.exports = ForwardController;
  

Я перепробовал много комбинаций, но сообщение никогда не пересылается… Бот уже является администратором на канале и также размещен в группах. (У меня также открыто личное сообщение с помощью бота, поэтому я думаю, что оно также должно быть переслано туда)

Ответ №1:

Взгляните на ссылку на API для библиотеки, страница документации, похоже, недоступна, так что Github — ваш друг.

forwardMessage Выполняемый вами вызов имеет неправильные аргументы и обращается к переменным частного класса. Он также возвращает обещание, поэтому вы должны дождаться обещания или привязать к нему .then . Вы можете использовать методы класса в самом Scope экземпляре.

Это должно быть больше похоже:

 // using async/await - note the containing function must be async for this approach
const result = await forwardMessage(<id of chat here>, scope.message().id());

// or to chain a .then
forwardMessage(<id of chat here>, scope.message().id())
  .then(result => /* do something with result */)
  .catch(err => /* handle the error */);
  

Это будет использовать Scopes метод экземпляра и обрабатывать отправку идентификатора текущего чата для вас, все, что вам нужно, это идентификатор чата, в который вы хотите отправить сообщение, а затем заменить <id of chat here> на этот идентификатор.

Комментарии:

1. К сожалению, не удается использовать ожидание, вызвавшее ошибку: scope.forwardMessage(idofgroup, scope._message._messageId); Я думаю, что чего-то не хватает..

2. ссылка После долгого времени, потраченного, я думаю, что внутри библиотеки что-то перепуталось, и это нужно исправить, поэтому я также открыл проблему на github.. [error] No processor found for update: Update { Я думаю, что проблема в этой ошибке..