1
+ import logging
2
+ from asyncio import sleep
3
+
4
+ from PIL import Image
5
+ import pytesseract
6
+
7
+ from aiogram import Bot , Dispatcher , executor , types
8
+ from aiogram .contrib .fsm_storage .memory import MemoryStorage
9
+ from aiogram .dispatcher import FSMContext
10
+
11
+ from config import TOKEN , FSM
12
+ from sqlighter import SQLighter
13
+
14
+
15
+ # Чтобы tesseract работал на винде
16
+ pytesseract .pytesseract .tesseract_cmd = 'C:\\ Program Files (x86)\\ tesseract.exe'
17
+
18
+ # parse_mode=types.ParseMode.HTML - чтобы можно было ставить теги как в html
19
+ bot = Bot (token = TOKEN , parse_mode = types .ParseMode .HTML )
20
+
21
+ # инициализируем соединение с БД
22
+ db = SQLighter ('db.db' )
23
+
24
+ dp = Dispatcher (bot , storage = MemoryStorage ())
25
+ logging .basicConfig (level = logging .INFO )
26
+
27
+
28
+ @dp .message_handler (commands = 'start' )
29
+ async def command_start (message : types .Message ):
30
+ await message .reply ("<b>Привет! Отправь фото с текстом (не рукописным), чтобы увидеть меня в действие."
31
+ "\n \n Beta version 1.0\n Поддержка: [email protected] </b>" )
32
+
33
+ # Добавление пользователя в БД
34
+ if (not db .subscriber_exists (message .from_user .id )):
35
+ # если юзера нет в базе, добавляем его
36
+ db .add_subscriber (message .from_user .id )
37
+ else :
38
+ # если он уже есть, то просто обновляем ему статус подписки
39
+ db .update_subscription (message .from_user .id , True )
40
+
41
+ @dp .message_handler (commands = 'help' )
42
+ async def command_help (message : types .Message ):
43
+ await message .reply ("<b>На основе искусственного интеллекта от Google (Teseract OCR) был написан этот бот. "
44
+ "Работа бота заключается в чтении отправленной фотографии и вывода с нее всего текста. "
45
+ "К боту подключен база данных для дальнейшей платный подписки. Пока все бесплатно :D"
46
+ "\n \n Beta version 1.0\n Поддержка: [email protected] </b>" )
47
+
48
+ @dp .message_handler (commands = 'game' )
49
+ async def game (message : types .Message ):
50
+ await message .answer ('Привет, сейчас я запущу кубики...' )
51
+ await sleep (1 )
52
+
53
+ await message .answer ('Я кидаю первый!' )
54
+ bot_data = await bot .send_dice (message .from_user .id )
55
+ bot_data = bot_data ["dice" ]["value" ]
56
+ await sleep (5 )
57
+
58
+ user_data = await bot .send_dice (message .from_user .id )
59
+ user_data = user_data ["dice" ]["value" ]
60
+ await sleep (5 )
61
+
62
+ if bot_data > user_data :
63
+ await message .answer ('Вы проиграли, попробуйте еще раз попозже ;(' )
64
+ elif bot_data < user_data :
65
+ await message .answer ('Сейчас победа за вами, но это не надолго!' )
66
+ else :
67
+ await message .answer ('Боевая ничья!' )
68
+
69
+ @dp .message_handler (content_types = ['photo' ])
70
+ async def download_photo (message : types .Message ):
71
+ await message .reply ('Какой язык на этой фотографии?'
72
+ '\n \n Возможные языки: \n rus - Русский, eng - English' )
73
+ await message .photo [- 1 ].download ("work_photo.jpg" )
74
+
75
+ await FSM .language_selection .set ()
76
+ # Сделать выбор языка инлайн кнопкой
77
+
78
+ @dp .message_handler (state = FSM .language_selection )
79
+ async def language_selection (message : types .Message , state = FSMContext ):
80
+ image = Image .open ("work_photo.jpg" )
81
+ image = image .convert ('1' )
82
+
83
+ language = message .text .lower ()
84
+
85
+ async with state .proxy () as data :
86
+ data ['language' ] = language
87
+
88
+ if language == 'rus' :
89
+ text = pytesseract .image_to_string (image , lang = "rus" )
90
+ elif language == 'eng' :
91
+ text = pytesseract .image_to_string (image , lang = "eng" )
92
+
93
+ await message .answer (f'Текст с фото: \n { text } ' )
94
+ await state .finish ()
95
+
96
+ @dp .message_handler ()
97
+ async def response_to_user_message (message : types .Message ):
98
+ if message .text == 'admin' :
99
+ await message .answer ('Ввдите пароль, чтобы зайти под именем администратора' )
100
+ else :
101
+ await message .reply ('Я был создан для работы с фото, давай каждый будет заниматься тем, что он умеет...' )
102
+
103
+ if __name__ == '__main__' :
104
+ executor .start_polling (dp , skip_updates = True )
0 commit comments