예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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}
예제 #5
0
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)
예제 #6
0
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.')
예제 #7
0
파일: main.py 프로젝트: iliakonnov/RogueBot
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.')
예제 #8
0
파일: main.py 프로젝트: yegorf1/RogueBot
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.')
예제 #9
0
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
	}
예제 #10
0
파일: main.py 프로젝트: iliakonnov/RogueBot
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.')
예제 #11
0
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='Воровство')
예제 #12
0
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='Воровство')
예제 #13
0
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)
예제 #14
0
파일: remains.py 프로젝트: yegorf1/RogueBot
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)
예제 #15
0
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)
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
파일: main.py 프로젝트: iliakonnov/RogueBot
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)
예제 #19
0
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)
예제 #20
0
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)