Сам код:
import telegram
from telegram import Bot, Update, InlineKeyboardMarkup, InlineKeyboardButton, ParseMode
from telegram.ext import MessageHandler, CallbackContext, CommandHandler, Updater, Filters
from telegram.utils.helpers import escape_markdown
# Замените 'Ваш_токен' на реальный токен вашего бота
TOKEN = '68156.:...dqXX64'
# Замените 'ID_канала' на ID вашего канала
CHANNEL_ID = '@.......tdtppv'
# Замените 'Ваш_чат_id' нe ваш ID в Telegram
ADMIN_CHAT_ID = '64....42..94'
# Инициализация бота
bot = Bot(token=TOKEN)
# Словарь для хранения кнопок по пользовательским запросам
user_buttons = {}
def start(update: Update, context: CallbackContext) -> None:
if not is_admin(update):
update.message.reply_text("Вы не являетесь администратором. Доступ запрещен.")
return
update.message.reply_text("Привет! Я бот для пересылки постов в канал.")
def add_buttons(update: Update, context: CallbackContext) -> None:
if not is_admin(update):
update.message.reply_text("Вы не являетесь администратором. Доступ запрещен.")
return
user_id = update.message.from_user.id
buttons_text = ' '.join(context.args)
if not buttons_text:
update.message.reply_text("Пожалуйста, укажите текст кнопок после команды /addbuttons.")
return
user_buttons[user_id] = buttons_text
update.message.reply_text(f"Кнопки добавлены: {buttons_text}")
def forward_to_channel(update: Update, context: CallbackContext) -> None:
if not is_admin(update):
update.message.reply_text("Вы не являетесь администратором. Доступ запрещен.")
return
user_id = update.message.from_user.id
# Замените 'ID_канала' на ID вашего канала
chat_id = CHANNEL_ID
# Получение текста и подписи
text = update.message.text
signature = f"\n\nПодпись: [{escape_markdown(update.message.chat.username)}](https://t.me/{update.message.chat.username})"
# Создание кнопок по запросу пользователя, если есть
if user_id in user_buttons:
keyboard_text = user_buttons[user_id]
keyboard = InlineKeyboardMarkup([
[InlineKeyboardButton(btn_text, callback_data=f'custom_button_{btn_text}')] for btn_text in keyboard_text.split()
])
else:
keyboard = None
# Пересылка сообщения в канал с подписью и кнопками
bot.send_message(chat_id, text + signature, reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN)
def add_photo(update: Update, context: CallbackContext) -> None:
if not is_admin(update):
update.message.reply_text("Вы не являетесь администратором. Доступ запрещен.")
return
user_id = update.message.from_user.id
chat_id = update.message.chat_id
# Получение подписи к фото
caption = context.args[0] if context.args else ''
# Создание кнопок по запросу пользователя, если есть
if user_id in user_buttons:
keyboard_text = user_buttons[user_id]
keyboard = InlineKeyboardMarkup([
[InlineKeyboardButton(btn_text, callback_data=f'custom_button_{btn_text}')] for btn_text in keyboard_text.split()
])
else:
keyboard = None
# Пересылка фото в канал с подписью и кнопками
bot.send_photo(chat_id, photo=context.user_data['photo'], caption=caption, reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN)
def format_text(update: Update, context: CallbackContext) -> None:
if not is_admin(update):
update.message.reply_text("Вы не являетесь администратором. Доступ запрещен.")
return
user_id = update.message.from_user.id
chat_id = update.message.chat_id
# Получение текста и форматирования
text = ' '.join(context.args)
formatted_text = apply_formatting(text)
# Пересылка отформатированного текста в канал
bot.send_message(chat_id, formatted_text, parse_mode=ParseMode.emarkdown)
def apply_formatting(text: str) -> str:
return f"*Жирный текст:* {text}\n_Курсивный текст:_ {text}\n`Моноширинный текст:` {text}"
def is_admin(update: Update) -> bool:
# Проверка, является ли пользователь администратором
user_id = update.message.from_user.id
return user_id in [admin.user.id for admin in bot.get_chat_administrators(CHANNEL_ID)]
# Обработчики
text_message_handler = MessageHandler(Filters.text & ~Filters.command & ~Filters.photo, forward_to_channel)
photo_message_handler = MessageHandler(Filters.photo, forward_to_channel)
start_handler = CommandHandler('start', start)
add_buttons_handler = CommandHandler('addbuttons', add_buttons, pass_args=True)
add_photo_handler = CommandHandler('addphoto', add_photo, pass_args=True, pass_user_data=True)
format_text_handler = CommandHandler('formattext', format_text, pass_args=True)
# Добавление обработчиков в диспетчер
dispatcher = bot.dispatcher
dispatcher.add_handler(text_message_handler)
dispatcher.add_handler(photo_message_handler)
dispatcher.add_handler(start_handler)
dispatcher.add_handler(add_buttons_handler)
dispatcher.add_handler(add_photo_handler)
dispatcher.add_handler(format_text_handler)
if __name__ == '__main__':
# Запуск бота
from telegram.ext import Updater
updater = Updater(token=TOKEN, use_context=True)
updater.start_polling()
updater.idle()
Версия python-telegram-bot ==13.7, хелп(
Выходит такая ошибка при запуске:
Traceback (most recent call last):
File "C:\Users\Asus\Downloads\текст.py", line 128, in <module>
dispatcher = bot.dispatcher
AttributeError: 'Bot' object has no attribute 'dispatcher'
[Finished in 2.9s]