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 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 action(user, reply, text): if text == 'Посмотреть в шар': users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if not usr.dead and usr.get_time_from_last_message( ) < 5 * 60 and usr.uid != user.uid: user_id = usr_id found_user = usr break if found_user is None: reply('Ничего не видно..') else: name = found_user.name if found_user.pet: pet = found_user.get_pet() name += ' и {0} {1}'.format(pet.name, pet.real_name) res = 'Вижу.. Вижу.. {0}... Ничего не видно..' if found_user.dead: res = '{0} валяется мертвым на краю мира..' elif found_user.state == 'corridor': res = '{0} пялится на коридор.' elif found_user.state == 'pray': res = '{0} молится Богам.' elif found_user.state == 'shop': res = '{0} затаривается вещичками.' elif found_user.state == 'inventory': res = '{0} копается в инвентаре.' elif found_user.state == 'room': res = ('{0} находится в комнате..\n\n' 'И видит..\n') room = roomloader.load_room(found_user.room[1], found_user.room[0], found_user) room_name = room.name res += room_name elif found_user.state == 'dice': res = ('{0} находится в комнате..\n\n' 'И бросает кости в..\n') room = roomloader.load_room(found_user.room[1], found_user.room[0], found_user) room_name = room.name res += room_name elif found_user.state == 'reborned': res = '{0} понимает, что «' + str( found_user.reborn_answer) + '»' reply(res.format(name)) else: user.leave(reply)
def get_tornament_dict(tid, uids): names = [] for uid in uids: usr = usermanager.get_user(uid) if usr: names.append(usr.name) return {'id': tid, 'users': uids, 'names': names}
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 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 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 get_tornament_dict(tid, uids): names = [ ] for uid in uids: usr = usermanager.get_user(uid) if usr: names.append(usr.name) return { 'id': tid, 'users': uids, 'names': names }
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 dice(user, reply, result, subject=None): steal_tries = user.get_room_temp('steal_tries', 0) user.set_room_temp('steal_tries', steal_tries +1) p = 1 - 0.5 * (0.9 ** steal_tries) steal_user = usermanager.get_user(user.get_room_temp('uid')) if result >= DICE_MAX * p: reply('Ворюга ты конечно первоклассный.') steal(user, steal_user, result > DICE_MAX, reply) else: reply('Мда, вот тебя отмутохало-то.', photo='BQADAgAD1ggAAmrZzgenvIB-RsNAhwI') dmg = steal_user.get_damage() user.make_damage(1, dmg, reply, name='Воровство')
def dice(user, reply, result, subject=None): steal_tries = user.get_room_temp('steal_tries', 0) user.set_room_temp('steal_tries', steal_tries + 1) p = 1 - 0.5 * (0.9**steal_tries) steal_user = usermanager.get_user(user.get_room_temp('uid')) if result >= DICE_MAX * p: reply('Ворюга ты конечно первоклассный.') steal(user, steal_user, result > DICE_MAX, reply) else: reply('Мда, вот тебя отмутохало-то.', photo='BQADAgAD1ggAAmrZzgenvIB-RsNAhwI') dmg = steal_user.get_damage() user.make_damage(1, dmg, reply, name='Воровство')
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 enter(user, reply): users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if usr.dead: user_id = usr_id found_user = usr break if found_user is not None: reply('Здесь лежат останки игрока {0}'.format(found_user.name), photo='BQADAgADFwkAAmrZzgf5q0m1CmsDggI') user.set_room_temp('items', found_user.items) else: reply('Здесь лежат останки лягушки. Воняет. Ты уходишь отсюда побыстрее.', photo='BQADAgADFwkAAmrZzgf5q0m1CmsDggI') user.leave(reply)
def enter(user, reply): users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if usr.dead: user_id = usr_id found_user = usr break if found_user is not None: reply('Здесь лежат останки игрока {0}'.format(found_user.name)) user.set_room_temp('items', found_user.items) else: reply('Здесь лежат останки лягушки. Воняет. Ты уходишь отсюда побыстрее') user.leave(reply)
def enter(user, reply): users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if not usr.dead and usr.get_time_from_last_message() < 5 * 60 and usr.uid != user.uid: user_id = usr_id found_user = usr break if found_user is not None: reply('Гоп стоп! Да это же {0}!'.format(found_user.name)) user.set_room_temp('uid', found_user.uid) user.set_room_temp('steal_tries', 0) else: reply('Убежал куда-то..') user.leave(reply)
def enter(user, reply): users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if not usr.dead and usr.get_time_from_last_message( ) < 5 * 60 and usr.uid != user.uid: user_id = usr_id found_user = usr break if found_user is not None: reply('Гоп стоп! Да это же {0}!'.format(found_user.name)) user.set_room_temp('uid', found_user.uid) user.set_room_temp('steal_tries', 0) else: reply('Убежал куда-то..') 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 enter(user, reply): users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if usr.dead: user_id = usr_id found_user = usr break if found_user is not None: reply('Здесь лежат останки игрока {0}'.format(found_user.name), photo='BQADAgADFwkAAmrZzgf5q0m1CmsDggI') user.set_room_temp('items', found_user.items) else: reply( 'Здесь лежат останки лягушки. Воняет как от старого пенсионера. Ты уходишь отсюда побыстрее.' ) user.leave(reply)
def action(user, reply, text): if text == 'Посмотреть в шар': users = list(usermanager.get_telegram_users()) random.shuffle(users) user_id = None found_user = None for usr_id in users: usr = usermanager.get_user(usr_id) if not usr.dead and usr.get_time_from_last_message() < 5 * 60 and usr.uid != user.uid: user_id = usr_id found_user = usr break if found_user is None: reply('Ничего не видно..') else: name = found_user.name if found_user.pet: pet = found_user.get_pet() name += ' и {0} {1}'.format(pet.name, pet.real_name) res = 'Вижу.. Вижу.. {0}... Ничего не видно..' if found_user.dead: res = '{0} валяется мертвым на краю мира..' elif found_user.state == 'corridor': res = '{0} пялится на коридор.' elif found_user.state == 'pray': res = '{0} молится Богам.' elif found_user.state == 'shop': res = '{0} затаривается вещичками.' elif found_user.state == 'inventory': res = '{0} копается в инвентаре.' elif found_user.state == 'room': res = ( '{0} находится в комнате..\n\n' 'И видит..\n' ) room = roomloader.load_room(found_user.room[1], found_user.room[0], found_user) room_name = room.name res += room_name elif found_user.state == 'dice': res = ( '{0} находится в комнате..\n\n' 'И бросает кости в..\n' ) room = roomloader.load_room(found_user.room[1], found_user.room[0], found_user) room_name = room.name res += room_name elif found_user.state == 'reborned': res = '{0} понимает, что «' + str(found_user.reborn_answer) + '»' reply(res.format(name)) else: user.leave(reply)