Задать вопрос
@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


Не знаете, с чем это могло бы быть связано, если у Вас был опыт работы с такими функциями тг? Спасибо
  • Вопрос задан
  • 1395 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
26 дек. 2024, в 23:03
500 руб./в час
26 дек. 2024, в 21:50
5000 руб./за проект
26 дек. 2024, в 21:01
10000 руб./за проект