-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhw_pro.py
99 lines (73 loc) · 3.75 KB
/
hw_pro.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackQueryHandler
from telegram import InlineKeyboardMarkup, Update, InlineKeyboardButton, ReplyKeyboardMarkup
from dotenv import load_dotenv
import os
# подгружаем переменные окружения
load_dotenv()
# токен бота
TOKEN = os.getenv('TG_TOKEN')
# форма inline клавиатуры
inline_frame = [[InlineKeyboardButton("English", callback_data="english")],
[InlineKeyboardButton("Русский", callback_data="russia")]]
# создаем inline клавиатуру
inline_keyboard = InlineKeyboardMarkup(inline_frame)
# функция-обработчик команды /start
async def start(update, context):
await update.message.reply_text('Выбери язык интерфейса', reply_markup=inline_keyboard)
# функция-обработчик текстовых сообщений
async def text(update: Update, context):
if context.user_data['lang'] == 'english':
text = 'We’ve received a message from you!'
else:
text = 'Текстовое сообщение получено!'
await update.message.reply_text(text)
# функция-обработчик текстовых сообщений
async def voice(update: Update, context):
if context.user_data['lang'] == 'english':
text = 'We’ve received a voice message from you!'
else:
text = 'Голосовое сообщение получено'
await update.message.reply_photo('images/bot_image.jpg', caption=text)
# функция-обработчик текстовых сообщений
async def image(update: Update, context):
if context.user_data['lang'] == 'english':
text = 'Photo saved!'
else:
text = 'Фотография сохранена'
photo = await update.message.photo[-1].get_file()
os.makedirs('photos', exist_ok=True)
photo_path = f'photos/{photo.file_path.split("/")[-1]}'
if not os.path.exists(photo_path):
await photo.download_to_drive(photo_path)
await update.message.reply_text(text)
# функция-обработчик нажатий на кнопки
async def button(update: Update, context):
# получаем callback query из update
query = update.callback_query
context.user_data['lang'] = query.data
# редактируем сообщение после нажатия
if context.user_data['lang'] == 'english':
text = 'You\'ve chosen English!'
else:
text = 'Ваш язык - русский'
await query.edit_message_text(text=text)
def main():
# создаем приложение и передаем в него токен
application = Application.builder().token(TOKEN).build()
print('Бот запущен...')
# добавляем обработчик команды /start
application.add_handler(CommandHandler("start", start))
# application.add_handler(CommandHandler("help", help))
# добавляем обработчик текстовых сообщений
application.add_handler(MessageHandler(filters.TEXT, text))
# добавляем обработчик голосовых сообщений
application.add_handler(MessageHandler(filters.VOICE, voice))
# добавляем обработчик изображений
application.add_handler(MessageHandler(filters.PHOTO, image))
# добавляем CallbackQueryHandler (только для inline кнопок)
application.add_handler(CallbackQueryHandler(button))
# запускаем бота (нажать Ctrl-C для остановки бота)
application.run_polling()
print('Бот остановлен')
if __name__ == "__main__":
main()