@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


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

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

Войти через центр авторизации
Похожие вопросы
24 апр. 2024, в 16:19
4000 руб./за проект
24 апр. 2024, в 15:34
20000 руб./за проект
24 апр. 2024, в 15:32
130000 руб./за проект