codeFlowType:
codeWrite
codeFlowLang:
Python
Напиши код на телеграм бот для фильма и проверка на подписка канала
Конечно! Вот пример кода для Telegram-бота на Python, который отправляет информацию о фильмах и проверяет подписку пользователя на канал. Мы будем использовать библиотеку python-telegram-bot
для создания бота и библиотеку sqlite3
для хранения информации о пользователях и их подписке.
Перед началом убедитесь, что у вас установлен python-telegram-bot
. Если нет, вы можете установить его с помощью следующей команды:
pip install python-telegram-bot
import logging
from telegram import Update, ForceReply
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
import sqlite3
# Настройка логирования
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
# Создаем базу данных для хранения информации о подписках
def create_database():
conn = sqlite3.connect('subscribers.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS subscribers (
user_id INTEGER PRIMARY KEY,
subscribed INTEGER DEFAULT 0
)
''')
conn.commit()
conn.close()
# Команда /start
def start(update: Update, context: CallbackContext) -> None:
user_id = update.effective_user.id
update.message.reply_text('Привет! Напиши /subscribe для проверки подписки на канал.')
# Команда /subscribe
def subscribe(update: Update, context: CallbackContext) -> None:
user_id = update.effective_user.id
# Проверка подписки на канал
chat_id = '@your_channel_name' # Замените на имя вашего канала
try:
member = context.bot.get_chat_member(chat_id, user_id)
if member.status in ['member', 'administrator', 'creator']:
update.message.reply_text('Вы подписаны на канал!')
# Сохраняем подписку в базе данных
save_subscription(user_id, 1)
else:
update.message.reply_text('Вы не подписаны на канал. Подпишитесь, чтобы получить информацию о фильмах!')
save_subscription(user_id, 0)
except Exception as e:
logger.error(f"Ошибка: {e}")
update.message.reply_text('Ошибка при проверке подписки. Убедитесь, что бот является администратором канала.')
# Функция для сохранения подписки в базе данных
def save_subscription(user_id, status):
conn = sqlite3.connect('subscribers.db')
c = conn.cursor()
c.execute('INSERT OR REPLACE INTO subscribers (user_id, subscribed) VALUES (?, ?)', (user_id, status))
conn.commit()
conn.close()
# Команда /film
def film(update: Update, context: CallbackContext) -> None:
user_id = update.effective_user.id
if check_subscription(user_id):
# Здесь вы можете добавить логику, чтобы отправить информацию о фильме
update.message.reply_text('Вот информация о фильме: ...')
else:
update.message.reply_text('Пожалуйста, сначала подпишитесь на канал.')
# Функция для проверки подписки из базы данных
def check_subscription(user_id):
conn = sqlite3.connect('subscribers.db')
c = conn.cursor()
c.execute('SELECT subscribed FROM subscribers WHERE user_id = ?', (user_id,))
result = c.fetchone()
conn.close()
return result is not None and result[0] == 1
def main():
create_database()
updater = Updater("YOUR_TOKEN_HERE") # Замените YOUR_TOKEN_HERE на токен вашего бота
# Получаем диспатчер для регистрации обработчиков
dispatcher = updater.dispatcher
# Команды
dispatcher.add_handler(CommandHandler("start", start))
dispatcher.add_handler(CommandHandler("subscribe", subscribe))
dispatcher.add_handler(CommandHandler("film", film))
# Запускаем бота
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
YOUR_TOKEN_HERE
на токен вашего Telegram-бота.@your_channel_name
на имя вашего канала для проверки подписки./start
, /subscribe
и /film
.Не забудьте, что при использовании этого кода вам также нужно настроить права доступа к вашему каналу, чтобы бот мог проверять подписку пользователей.