/
bot.py
101 lines (84 loc) · 4.06 KB
/
bot.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
100
101
from twx.botapi import TelegramBot, ReplyKeyboardMarkup, ReplyKeyboardHide
from user import User
from scenario import Scenario
import time
import sys
import sqlite3
scenario_file = 'script.rpy'
if len(sys.argv) > 1:
scenario_file = sys.argv[1]
scenario = Scenario(scenario_file)
User.db = sqlite3.connect('space-quest.db')
def get_message_reply(message):
user = User(message.sender.id)
if message.text == "/start" or message.text == "🔄 Начать заново":
user.progressLabel, user.progressKey, user.active, user.variables = "start", -1, 1, {}
user.save()
return ("Вы начали игру заново", ReplyKeyboardMarkup.create([['⏸ Приостановить игру']],resize_keyboard=True))
elif message.text == "/pause" or message.text == "⏸ Приостановить игру":
user.active = 0
user.save()
return ("Игра приостановлена", ReplyKeyboardMarkup.create([['🔄 Начать заново'],['▶️ Продолжить игру']],resize_keyboard=True))
elif message.text == "/continue" or message.text == "▶️ Продолжить игру":
user.active = 1
user.save()
return ("Игра возобновлена", ReplyKeyboardMarkup.create([['⏸ Приостановить игру']],resize_keyboard=True))
else:
scenario.load(user)
if scenario.get_current().__class__.__name__ == "NodeMenu":
menu_item_finded = False
for line,label in scenario.get_current().menu:
if (line == message.text):
menu_item_finded = True
scenario.goto(label,-1)
break
if (menu_item_finded):
reply, menu = scenario.next()
user.load(scenario)
user.lastMessage = round(time.time())
user.save()
if (menu):
return (reply, ReplyKeyboardMarkup.create([[line] for line,label in menu],resize_keyboard=True))
else:
return (reply, ReplyKeyboardMarkup.create([['⏸ Приостановить игру']],resize_keyboard=True))
else:
return ("???", ReplyKeyboardMarkup.create([[line] for line,label in scenario.get_current().menu] + [['🔄 Начать заново']],resize_keyboard=True))
else:
if (user.active):
return ("Чтобы начать заново введите /start, чтобы приостановить игру введите /pause", ReplyKeyboardMarkup.create([['🔄 Начать заново'],['⏸ Приостановить игру']],resize_keyboard=True))
else:
return ("Чтобы начать заново введите /start, чтобы продолжить игру введите /continue", ReplyKeyboardMarkup.create([['🔄 Начать заново'],['▶️ Продолжить игру']],resize_keyboard=True))
bot = TelegramBot('203607471:AAGIXeoretNObpGdN8lh1ecOQWUa5xY12c8')
bot.update_bot_info().wait()
print (bot.username)
last_update_id = 0
try:
while True:
updates = bot.get_updates(last_update_id+1).wait()
for update in updates:
last_update_id = update.update_id
reply, keyboard = get_message_reply(update.message)
bot.send_message(update.message.sender.id, reply, reply_markup = keyboard, parse_mode = 'Markdown')
# print ("sended "+reply)
time.sleep(0.5)
users = User.getAll(True, round(time.time())+1) #up to -5
for user in users:
if (user.progressKey == -1):
scenario.progress = (user.progressLabel, 0)
else:
scenario.progress = (user.progressLabel, user.progressKey)
if scenario.get_current().__class__.__name__ != "NodeMenu" and scenario.get_current().__class__.__name__ != "NodeReturn":
scenario.load(user)
reply, menu = scenario.next()
user.load(scenario)
user.lastMessage = round(time.time())
user.save()
if (menu):
bot.send_message(user.id, reply, reply_markup = ReplyKeyboardMarkup.create([[line] for line,label in menu],resize_keyboard=True), parse_mode = 'Markdown')
else:
bot.send_message(user.id, reply, reply_markup = ReplyKeyboardMarkup.create([['⏸ Приостановить игру']],resize_keyboard=True), parse_mode = 'Markdown')
time.sleep(0.5)
# print ("sended "+reply)
except KeyboardInterrupt:
User.db.close()
exit()