Получение пользователей канала - метод getChatMember
Всем привет. Есть код бота на nodejs + telegraf. Хочу проверить статус (подписку) пользователя на канал, если он пишет в чате (думаю в курсе про какой бот идет речь). Проблема в том, что он проверяет статус пользователя в чате, но не в канале, хотя в метод закидываю id канала. Как это проправить или что я делаю не так? Собственно код:
const { Telegraf } = require('telegraf')
const conf = require('./conf')
const bot = new Telegraf('токен')
bot.start((ctx) => ctx.reply('Welcome'))
bot.on('message', async (ctx) => {
let members_id = ctx.message.from.id
let user = ctx.message.from.first_name
let pass = await ctx.getChatMember(members_id, conf.chatId)
if (pass.status == 'left') {
ctx.reply(`${user}, подпишись на канал`)
}
})
bot.launch()
// Enable graceful stop
process.once('SIGINT', () => bot.stop('SIGINT'))
process.once('SIGTERM', () => bot.stop('SIGTERM'))
Ответы (1 шт):
Проблема заключается в том, что вы используете метод getChatMember() для проверки статуса подписки пользователя на канал, но в качестве аргументов вы передаете идентификатор чата и идентификатор пользователя. Вместо этого вам нужно использовать идентификатор канала и идентификатор пользователя, чтобы проверить, подписан ли пользователь на канал.
Вот исправленный код:
const { Telegraf } = require('telegraf')
const conf = require('./conf')
const bot = new Telegraf('токен')
bot.start((ctx) => ctx.reply('Welcome'))
bot.on('message', async (ctx) => {
let user_id = ctx.message.from.id
let user = ctx.message.from.first_name
let chat_member = await ctx.getChatMember(conf.channelId, user_id)
if (chat_member.status == 'left') {
ctx.reply(`${user}, подпишись на канал`)
}
})
bot.launch()
// Enable graceful stop
process.once('SIGINT', () => bot.stop('SIGINT'))
process.once('SIGTERM', () => bot.stop('SIGTERM'))
Обратите внимание, что я поменял название переменной members_id на user_id, чтобы лучше отражать ее назначение. Также я заменил переменную pass на chat_member, чтобы лучше отражать, что возвращается из метода getChatMember(). Вместо этого я просто проверяю свойство status объекта chat_member, чтобы узнать, подписан ли пользователь на канал или нет.