Skip to content

Commit 58f37d1

Browse files
committed
add annotation bot example
1 parent 2192ba8 commit 58f37d1

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

bot_example/bot.py

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# -*- coding: utf-8 -*-
2+
import telebot
3+
import conf
4+
import random
5+
import shelve
6+
from telebot import types
7+
8+
bot = telebot.TeleBot(conf.TOKEN, threaded=False)
9+
10+
with open('reviews.csv', 'r', encoding='utf-8') as f:
11+
reviews = {}
12+
for line in f:
13+
num, text = line.strip().split('\t')
14+
reviews[num] = text
15+
review_keys = list(reviews.keys())
16+
17+
keyboard = types.ReplyKeyboardMarkup(row_width=3)
18+
btn1 = types.KeyboardButton('+')
19+
btn2 = types.KeyboardButton('-')
20+
btn3 = types.KeyboardButton('=')
21+
keyboard.add(btn1, btn2, btn3)
22+
23+
shelve_name = 'shelve.db' # Файл с хранилищем
24+
25+
26+
def set_user_review(chat_id, review):
27+
"""
28+
Записываем юзера в игроки и запоминаем, что он должен ответить.
29+
:param chat_id: id юзера
30+
:param estimated_answer: правильный ответ (из БД)
31+
"""
32+
with shelve.open(shelve_name) as storage:
33+
storage[str(chat_id)] = review
34+
35+
36+
def finish_user_review(chat_id):
37+
"""
38+
Заканчиваем игру текущего пользователя и удаляем правильный ответ из хранилища
39+
:param chat_id: id юзера
40+
"""
41+
with shelve.open(shelve_name) as storage:
42+
del storage[str(chat_id)]
43+
44+
45+
def get_user_review(chat_id):
46+
"""
47+
Получаем правильный ответ для текущего юзера.
48+
В случае, если человек просто ввёл какие-то символы, не начав игру, возвращаем None
49+
:param chat_id: id юзера
50+
:return: (str) Правильный ответ / None
51+
"""
52+
with shelve.open(shelve_name) as storage:
53+
try:
54+
review = storage[str(chat_id)]
55+
return review
56+
# Если человек не играет, ничего не возвращаем
57+
except KeyError:
58+
return None
59+
60+
61+
# этот обработчик запускает функцию send_welcome, когда пользователь отправляет команды /start или /help
62+
@bot.message_handler(commands=['help'])
63+
def send_welcome(message):
64+
bot.send_message(message.chat.id,
65+
"Здравствуйте! Это бот для разметки отзывов на кинофильмы.\n Положительные отзывы отмечаются плюсом +, отрицательные минусом -, а нейтральные знаком равно =.")
66+
67+
68+
@bot.message_handler(commands=['start'])
69+
def send_first_review(message):
70+
review_num = random.choice(review_keys)
71+
bot.send_message(message.chat.id, reviews[review_num], reply_markup=keyboard)
72+
set_user_review(message.chat.id, review_num)
73+
74+
75+
@bot.message_handler(regexp='[-+=]') # этот обработчик реагирует на символы разметки
76+
def get_answer(message):
77+
review_num = get_user_review(message.chat.id)
78+
if review_num:
79+
with open('results.csv', 'a', encoding='utf-8') as results:
80+
results.write(review_num + '\t' + message.text + '\n')
81+
review_num = random.choice(review_keys)
82+
bot.send_message(message.chat.id, reviews[review_num], reply_markup=keyboard)
83+
set_user_review(message.chat.id, review_num)
84+
else:
85+
bot.send_message(message.chat.id, 'Вы не разметили отзыв.')
86+
87+
88+
if __name__ == '__main__':
89+
bot.polling(none_stop=True)

bot_example/conf.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
TOKEN = "390595991:AAG_4wqdfxtSMnJKow8YjcSxNOxjyAWY3PU"

bot_example/results.csv

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
5 +
2+
3 =
3+
4 -
4+
5 +
5+
10 -
6+
4 -
7+
1 -
8+
3 -
9+
5 +
10+
4 -

0 commit comments

Comments
 (0)