from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (
Application,
CommandHandler,
CallbackQueryHandler,
MessageHandler,
filters,
ContextTypes,
)
# Функция обработчик команды /start
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
keyboard = [
[InlineKeyboardButton("Отправить сообщение", callback_data='send_message')]
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text('Выберите действие:', reply_markup=reply_markup)
# Функция обработчик нажатия кнопки
async def button(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
query = update.callback_query
await query.answer()
if query.data == 'send_message':
await query.edit_message_text(text="Введите сообщение для отправки:")
# Функция обработчик полученного сообщения
async def receive_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
message_text = update.message.text
# Отправка сообщения в группу
await context.bot.send_message(chat_id='ID_CHAT', text=message_text)
await update.message.reply_text(f"Сообщение отправлено: {message_text}")
def main() -> None:
# Создайте приложение
application = Application.builder().token("YOUR_TOKEN_HERE").build()
# Добавьте обработчики
application.add_handler(CommandHandler('start', start))
application.add_handler(CallbackQueryHandler(button))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, receive_message))
# Запустите бота
application.run_polling()
if __name__ == '__main__':
main()
Ошибка ImportError: cannot import name 'Filters' from 'telegram.ext' возникает из-за изменений в библиотеке python-telegram-bot. Начиная с версии 20, библиотека претерпела значительные изменения, и многие классы и методы были переименованы или перемещены. В частности, класс Filters был заменён на модуль filters с различными фильтрами внутри него.
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "<string>", line 2, in <module>
ImportError: cannot import name 'Filters' from 'telegram.ext' (/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telegram/ext/__init__.py)
код бота:
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, MessageHandler, Filters, CallbackContext
def start(update: Update, context: CallbackContext) -> None:
keyboard = [[InlineKeyboardButton("Отправить сообщение", callback_data='send_message')]]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('Выберите действие:', reply_markup=reply_markup)
def button(update: Update, context: CallbackContext) -> None:
query = update.callback_query
query.answer()
if query.data == 'send_message':
query.edit_message_text(text="Введите сообщение для отправки:")
return
def receive_message(update: Update, context: CallbackContext) -> None:
message_text = update.message.text
# Отправка сообщения в группу
context.bot .send_message(chat_id='Id Chat', text=message_text)
update.message.reply_text(f"Сообщение отправлено: {message_text}")
def main() -> None:
updater = Updater("Token", use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', start))
dp.add_handler(CallbackQueryHandler(button))
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, receive_message))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()