def recover(self, reply): save = self.get_variable('save') try: self.hp = save['hp'] self.mp = save['mp'] self.gold = save['gold'] self.race = save['race'] self.max_hp = save['max_hp'] self.max_mp = save['max_mp'] self.items = save['items'] self.active_items = save['active_items'] self.inventory_page = save['inventory_page'] self.gods = save['gods'] self.gods_level = save['gods_level'] self.last_god = save['last_god'] self.prayed = save['prayed'] self.damage = save['damage'] self.defence = save['defence'] self.charisma = save['charisma'] self.mana_damage = save['mana_damage'] self.tags = save['tags'] self.reborn_answer = save['reborn_answer'] self.rooms_to_story = save['rooms_to_story'] self.next_story_room = save['next_story_room'] self.story_level = save['story_level'] self.last_message = save['last_message'] self.rooms_count = save['rooms_count'] self.monsters_killed = save['monsters_killed'] self.variables = save['variables'] self.pet = save['pet'] self.state = 'corridor' self.subject = None self.room = ('', '') self.room_temp = {} self.dead = False self.visited_shop = False self.shop_items = [] self.shop_names = [] self.set_variable('save', None) usermanager.save_user(self) except: pass finally: reply('О, сохранение!') self.open_corridor(reply)
def action(user, reply, text): question = user.get_room_temp('question', def_val='first') if question == 'first': user.set_room_temp('goal_name', text) user.set_room_temp('question', 'second') reply('Теперь напечатай текст послания.') else: name = user.get_room_temp('goal_name', def_val='____') found_uid = 0 found_usr = None for uid in usermanager.get_telegram_users(): usr = usermanager.get_user(uid) if usr.name == name: found_uid = uid found_usr = usr break if found_usr is None: reply('Вашего адресата мы не нашли, но нашли кое-кого другого') found_usr = usermanager.random_user() reply('Отлично! Доставим в кратчайшие сроки.') if found_uid == user.uid: user.add_item('good', 'stone', {'message': text}) else: found_usr.add_item('good', 'stone', {'message': text}) usermanager.save_user(found_usr) user.leave(reply)
def pet(bot, update): if config.MODERS_IDS is True or str(update.message.chat_id) in config.MODERS_IDS: user = usermanager.get_user(update.message.chat_id) user.cheater = True usermanager.save_user(user) cmd, pet, name = update.message.text.split() usermanager.new_pet(update.message.chat_id, pet, name) else: bot.sendMessage(update.message.chat_id, text='NO.')
def gold(bot, update): if str(update.message.chat_id) in config.MODERS_IDS: cmd, integer = update.message.text.split() integer = int(integer) user = usermanager.get_user(update.message.chat_id) user.gold += integer usermanager.save_user(user) else: bot.sendMessage(update.message.chat_id, text='NO.')
def room(bot, update): c_id = update.message.chat_id if config.MODERS_IDS is True or str(c_id) in config.MODERS_IDS: user = usermanager.get_user(update.message.chat_id) user.cheater = True usermanager.save_user(user) cmd, room_type, name = update.message.text.split() usermanager.open_room(c_id, lambda *a, **kw: reply(c_id, bot, *a, **kw), room_type, name) else: bot.sendMessage(update.message.chat_id, text='NO.')
def start_tornament(tornament_name, reply): uids = databasemanager.get_list(tornament_name) databasemanager.clear_list(tornament_name) tornament_id = str(round(time.time() * 1000)) tornament_dict = get_tornament_dict(tornament_id, uids) save_tornament(tornament_id, uids) databasemanager.add_to_list('tors', tornament_id) for uid in uids: def rep(txt, btns=None, photo=None): reply(uid, txt, btns, photo) usr = usermanager.get_user(uid) if usr: usr.start_tornament(tornament_id, rep) usermanager.save_user(usr)
def steal(user, steal_user, is_last, reply): items = steal_user.get_items() if len(items) == 0: reply('Но в карманах было чуть меньше чем ничего. Вот неудача!') user.leave(reply) return item_to_steal = random.choice(items) reply('Ты стырил *{0}*!'.format(item_to_steal.name)) user.add_item(item_to_steal.buff, item_to_steal.code_name) steal_user.remove_item(item_to_steal.code_name) steal_user.add_item('special', 'steal_note', {'stealer': user.name, 'item_name': item_to_steal.name}) usermanager.save_user(steal_user) if is_last: user.leave(reply)
def update_tornament(reply, tid): tornament = get_tornament(tid) uids = tornament['users'] users = [usermanager.get_user(uid) for uid in uids] def get_next_user(i): next_i = (i + 1) % len(users) while users[next_i].dead: next_i = (i + 1) % len(users) return next_i if len(users) == 1: user = users[0] def rep(txt, btns=None, photo=None): reply(user.uid, txt, btns, photo) databasemanager.remove_from_list('tors', tornament['id']) gold = random.randint(10000, 20000) rep('Это победа! Цезарь дарует тебе *{0}* злт.'.format(gold)) user.give_gold(gold) user.open_corridor(rep) usermanager.save_user(user) else: msg = '' for i, user in enumerate(users): dmg = user.get_room_temp('damage', def_val=0) user.set_room_temp('damage', 0) user.set_room_temp('attacked', False) next_i = get_next_user(i) if next_i != i: def rep(txt, btns=None, photo=None): reply(users[next_i].uid, txt, btns, photo) users[next_i].make_damage(dmg, dmg, rep) usermanager.save_user(users[next_i]) msg += '{0} нанес {1} ед. урона игроку {2}\n'.format( user.name, dmg, users[next_i].name) usermanager.save_user(user) msg += '\nПродолжаем резню!' for user in users: if not user.dead: reply(user.uid, msg) else: uids.remove(user.uid) reply(user.uid, 'Тебя постигло поражение. Так держать!', ['/start']) save_tornament(tid, uids)
def steal(user, steal_user, is_last, reply): items = steal_user.get_items() if len(items) == 0: reply('Но в карманах было чуть меньше чем ничего. Вот неудача!') user.leave(reply) return item_to_steal = random.choice(items) reply('Ты стырил *{0}*!'.format(item_to_steal.name)) user.add_item(item_to_steal.buff, item_to_steal.code_name) steal_user.remove_item(item_to_steal.code_name) steal_user.add_item('special', 'steal_note', { 'stealer': user.name, 'item_name': item_to_steal.name }) usermanager.save_user(steal_user) if is_last: user.leave(reply)
def bot(bot, update): c_id = update.message.chat_id usr = usermanager.get_user(c_id) usr.bot_token = str(uuid.uuid4()) bot.sendMessage( c_id, text=( 'Твой токен: `{token}`\n\n' 'Доступные методы:\n' ' `send` ([демо]({url}/{token}/send?message=Hello!)) -- отправляет сообщение боту. Сообщение передается параметре `message`\n' ' `messages` ([демо]({url}/{token}/messages)) -- получает последние 50 сообщений. Если передан параметр `clear`, то удаляет все старые сообщения.\n' ' `cheat_stats` -- изменяет статы игрока. В качестве параметров можно передать следующее:\n' ' `hp`, `mp`, `gold`, `max_hp`, `max_mp`, `damage`, `defence`, `charisma`, `mana_damage` -- значения стат. Они будут прибавлены к текущим статам.\n' ' `zero` -- если указан, то не прибавляет, а устанавливает значение стат в переданные.\n\n' 'Все запросы делаются к такому url: `{url}/<token>/<method>`, где `<token>` -- твой токен, а `<method>` -- какой метод нужен.\n\n' 'Удачи, ботовод!' ).format( token=str(c_id)+':'+usr.get_bot_token(), url='https://example.com/api' ), parse_mode=telegram.ParseMode.MARKDOWN ) usermanager.save_user(usr)
def update_tornament(reply, tid): tornament = get_tornament(tid) uids = tornament['users'] users = [ usermanager.get_user(uid) for uid in uids ] def get_next_user(i): next_i = (i + 1) % len(users) while users[next_i].dead: next_i = (i + 1) % len(users) return next_i if len(users) == 1: user = users[0] def rep(txt, btns=None, photo=None): reply(user.uid, txt, btns, photo) databasemanager.remove_from_list('tors', tornament['id']) gold = random.randint(10000, 20000) rep('Это победа! Цезарь дарует тебе *{0}* злт.'.format(gold)) user.give_gold(gold) user.open_corridor(rep) usermanager.save_user(user) else: msg = '' for i, user in enumerate(users): dmg = user.get_room_temp('damage', def_val=0) user.set_room_temp('damage', 0) user.set_room_temp('attacked', False) next_i = get_next_user(i) if next_i != i: def rep(txt, btns=None, photo=None): reply(users[next_i].uid, txt, btns, photo) users[next_i].make_damage(dmg, dmg, rep) usermanager.save_user(users[next_i]) msg += '{0} нанес {1} ед. урона игроку {2}\n'.format(user.name, dmg, users[next_i].name) usermanager.save_user(user) msg += '\nПродолжаем резню!' for user in users: if not user.dead: reply(user.uid, msg) else: uids.remove(user.uid) reply(user.uid, 'Тебя постигло поражение. Так держать!', ['/start']) save_tornament(tid, uids)