@Dcfgvy

Почему возникает ошибка при добавлении Telegram пользователя в частный канал через бота на NodeJS?

Здравствуйте! Хочу сделать Telegram бота на NodeJS, который по первому сообщению от пользователя будет принимать его в частный канал. То есть создавать приглашение и моментально его принимать. Создал приватный канал, бота и сделал этого бота админом в приватном канале со всеми правами кроме добавления других админов. На просторах документации, так как кроме неё ничего на эту тему не нашёл, нашёл метод createChatInviteLink для создания ссылки приглашения и approveChatJoinRequest для подтверждения:

https://core.telegram.org/tdlib/docs/classtd_1_1td...
647a1f1f55dd6953060205.png

Вот мой код:
const TelegramBot = require('node-telegram-bot-api');

const TOKEN = 'my_token';
const PRIVATE_CHANNEL_ID = 'my_private_channel_id';

const bot = new TelegramBot(TOKEN, { polling: true });

bot.on('message', async (msg) => {
  //console.log(msg);
   const invitelink = await bot.createChatInviteLink(PRIVATE_CHANNEL_ID, msg.chat, 0, 1, true);
   console.log(invitelink);
   await bot.approveChatJoinRequest(PRIVATE_CHANNEL_ID, msg.from.id);
  console.log("approved");
});


При approveChatJoinRequest выдаёт ошибку. Это её последняя информативная часть, так как в консоль вся ошибка не помещается:
body: {
      ok: false,
      error_code: 400,
      description: 'Bad Request: HIDE_REQUESTER_MISSING'
    },
    [Symbol(kCapture)]: false,
    [Symbol(kHeaders)]: {
      server: 'nginx/1.18.0',
      date: 'Thu, 01 Jun 2023 19:14:41 GMT',
      'content-type': 'application/json',
      'content-length': '81',
      connection: 'keep-alive',
      'strict-transport-security': 'max-age=31536000; includeSubDomains; preload',
      'access-control-allow-origin': '*',
      'access-control-expose-headers': 'Content-Length,Content-Type,Date,Server,Connection'
    },
    [Symbol(kHeadersCount)]: 16,
    [Symbol(kTrailers)]: null,
    [Symbol(kTrailersCount)]: 0,
    [Symbol(RequestTimeout)]: undefined


Не знаете, с чем это могло бы быть связано, если у Вас был опыт работы с такими функциями тг? Спасибо
  • Вопрос задан
  • 686 просмотров
Решения вопроса 1
@StockholmSyndrome
у меня опыта с апи телеграмма нет, но глядя на доки могу предположить несколько вещей:

у пользователя есть два способа попасть в приватный канал - перейти по ссылке-приглашению (invite link) или подать заявку (join request)

в первом случае пользователь пишет боту, он вызывает метод createChatInviteLink, который возвращает объект ChatInviteLink, содержащий поле invite_link (ссылка-приглашение)
далее бот кидает эту ссылку пользователю, он переходит по ней и попадает в чат

во втором случае пользователь сам отправляет запрос на вступление в чат (join request), бот ловит это событие и вызывает либо approveChatJoinRequest (принять) или declineChatJoinRequest (отклонить)

ваш код создаёт ссылку-приглашение, ничего с ней не делает, затем вы пытаетесь принять join request, которого не существует, потому что пользователь не подавал заявку, о чём и говорит эта ошибка

400 HIDE_REQUESTER_MISSING The join request was missing or was already handled.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы