когда пишет пользователь который не подписался на каналы бот его пропускает
import telebot
from telebot.apihelper import ApiTelegramException
import g4f
from g4f.client import Client
from config import TOKEN
bot = telebot.TeleBot(TOKEN)
CHAT_ID = "-1002198876639", "-1002209280416"
client = Client()
system = {"role": "system", "content": "Ты - NERPA или Нерпа или Нерпочка или нерпа или нерпочка или nerpa, у тебя есть 'дедушка' озеро Байкал который поведал тебе много историй, ты можешь рассказать многое о озере Байкал."}
print("Bot is running...")
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Чтобы пользоваться ботом подпишитесь на эти каналы\nhttps://t.me/baikal_wood_rus\nhttps://t.me/baikal_wood_NRB\nпосле подписки отправьте /done")
@bot.message_handler(commands=['done', 'gotovo'])
def test_subcribe(message):
USER_ID = message.from_user.id
if is_subscribed(CHAT_ID, USER_ID) == True:
bot.reply_to(message, "Привет!\nЯ NERPA_GPT созданная командой BAIKAL_WOOD. Чем могу помочь?")
else:
bot.reply_to(message, "Вы не подписаны на каналы. Пожалуйста, подпишитесь, чтобы продолжить.")
def is_subscribed(chat_id, user_id):
try:
bot.get_chat_member(chat_id, user_id)
return True
except ApiTelegramException as e:
return False
@bot.message_handler(func=lambda message: True)
def echo_all(message):
response = client.chat.completions.create(
provider=g4f.Provider.Blackbox,
model="gpt-3.5-turbo",
messages=[system, {"role": "user", "content": message.text}]
)
bot.reply_to(message, response.choices[0].message.content)
while True:
bot.infinity_polling()
пробовал переписать проверку на user_id = message.from_user.id
try:
chat_member = bot.get_chat_member(channel_id, user_id)
if chat_member.status != 'left':
bot.reply_to(message, "Вы подписаны на канал!")
else:
bot.reply_to(message, "Вы не подписаны на канал. Пожалуйста, подпишитесь, чтобы продолжить.")
except Exception as e:
bot.reply_to(message, "Произошла ошибка при проверке подписки на канал.")
Ответы (1 шт):
Автор решения: Hamlet Sargsyan
→ Ссылка
def is_subscribed(chat_id, user_id):
chat_member = bot.get_chat_member(chat_id, user_id)
if chat_member.status in ["member", "administrator", "creator"]:
return True
return False
Подробнее про статус пользовался, и какие значения у него может быть можно прочить в документации телеграмм: https://core.telegram.org/bots/api#chatmember