async def infection(self):
     percent = (DB.who_healthy_and_walk() + DB.who_ill_and_walk()*1.5) / (DB.show_users_count())
     if percent <= 0:
         return self.min_chance
     elif percent > self.max_chance:
         return self.max_chance
     return round(percent, 2)
Beispiel #2
0
async def time_eat_and_drink():
    hungry = DB.hunger_and_thirsted()
    max_mes = 30 - 1
    if hungry:
        for i in enumerate(hungry):
            if i[1].count(0) == 2:
                await bot.send_message(
                    i[1][0],
                    'Ты голоден и хочешь пить\! Используй еду и воду из хранилища\.'
                )

            elif i[1][1] == 0:
                await bot.send_message(
                    i[1][0],
                    'Ты проголодался\! Используй еду из своего хранилища, пока не замучал голод\.'
                )

            elif i[1][2] == 0:
                await bot.send_message(
                    i[1][0],
                    'Ты хочешь пить\! Выпей воды из своего хранилища, пока не замучала жажда\.'
                )

            if i[0] == max_mes:
                max_mes += 30
                await sleep(1)
    dead = tuple(DB.dead())
    if dead:
        for i in dead:
            await bot.send_message(
                i,
                '*Здоровье обнулилось до нуля\!*\nПонижен уровень, отнято по 100 с каждого запаса '
                'хранилища\.')
Beispiel #3
0
async def start(message: types.Message):
    if DB.return_id(message.chat.id) != message.chat.id:
        db.add_user(message.chat.id)
        DB.add(message.chat.id, message.date)
        await message.answer(
            '*Добро пожаловать в Карантин Бот\!*'
            'Данный бот представляет собой симулятор карантина, где твоя задача получить '
            'как можно больше ограниченое кол\-во припасов для выживания\!'
            'Чтобы получать припасы, тебе нужно выходить на улицу, населенной вирусами\!'
        )
        await sleep(3)
        await message.answer(
            'Для начала введи свой никнейм\.\nДоступны символы кириллицы, латиницы и цифры\.\n'
            'Максимальная длина ника \- 12, минимальная 4\.')

    else:
        name = DB.return_name(message.chat.id)
        if name is None:
            await message.answer(
                'Приветствую\! По\-моему, ты должен был ввести свой никнейм\. Введи его сейчас\!\n'
                '_Доступны символы кириллицы, латиницы и цифры\n'
                'Максимальная длина ника \- 12, минимальная 4\._')
        else:
            await message.answer(f'Привет, {name}\!',
                                 reply_markup=await KEY.main())
    async def new_level(self):
        need_exp = await self.need_exp()
        experience = DB.check_experience(self.id)
        if experience >= need_exp:

            DB.upd_lvl(self.id, self.experience - need_exp)
            return '\n*Новый уровень\!* 🆙 '
        else:
            return ''
 async def take_medicine(self):
     if self.drug == 0 and self.drugs > 0 and self.ill > 0:
         DB.take_med(self.id)
         return '*Ты принял лекарство\.*\n_Действие лекарства продлится 2 часа\._'
     elif self.drugs <= 0:
         return '_У тебя нет лекарств\!_'
     elif self.ill == 0:
         return '_Ты здоров\! Нет необходимости в лекарстве\._'
     else:
         return '_Лекарство уже действует\!_'
Beispiel #6
0
async def registration(message: types.Message):
    if message.text.isalnum() is False or (4 >= len(message.text) > 12):
        await message.answer('Такой никнейм не пойдет\.')
    elif DB.check_name(message.text) is not None:
        await message.answer('Это имя уже занято\!')
    else:
        await message.answer('Отлично\!\nЧто ж, удачи в выживании\!')
        DB.registered(message.chat.id, message.text)
        await sleep(1)
        await main(message)
 async def washed_hands(self):
     if self.water >= 5 and self.medicines >= 1:
         DB.wash_hands(self.id)
         upd = db.get_info(self.id)['chance_sick'] - 0.02
         if upd <= 0.01:
             upd = 0.01
         db.equipment(self.id, {'washed_hands': True, 'chance_sick': upd})
         return 'Помыты руки.'
     elif self.water < 5:
         return 'Не хватает воды!'
     else:
         return 'Не хватает медикамента для дезинфекции!'
 async def try_luck(self, value, price=100):
     async def you_gave(chances):
         return f'_Ты получил:_\n`' \
                f'🧻{chances[0]} 🍖{chances[1]} 💧{chances[2]} 💉{chances[3]} 😷{chances[4]} 💊{chances[5]}\n`'
     if self.paper >= price:
         DB.buy_luck_chance(self.id, price)
         if value == 1:
             return f"*Номер 1*\n_Ты ничего не получил_"
         elif value > 1:
             DB.you_win(self.id, prizes[value])
             return f"*Номер {value}*\n" + await you_gave(prizes[value])
     else:
         return '_Не хватает бумаги для розыгрыша\!_'
 async def try_go(self):
     if self.ill > 0 and self.drug == 0:
         return f'*Ты не здоров\!*\n_Тебе нужно принять лекарство, чтобы ты мог выходить на улицу\._'
     minutes = randint(10, 20)
     if self.exploring is None:
         DB.set_exploring(self.id, minutes)
         db.equipment(self.id, {"exp": minutes})
         if db.get_info(self.id)['masked'] is True:
             DB.use_mask(self.id)
         return f'*Путешествие началось\!*\n_Это займёт {minutes} минут времени\._'
     else:
         return f'*Ты уже гуляешь по окрестностям\!*' \
                f'\n_Осталось времени: около \{self.exploring} мин\._'
 async def heal(self):
     count = 5
     if self.health < 100 and self.medicines > 0:
         if self.health > 95:
             count = 100 - self.health
             DB.heal(self.id, count)
         else:
             DB.heal(self.id)
         return f'*Ты принял медикаменты\.*\n_\+ {count} к здоровью\._'
     elif self.medicines <= 0:
         return '_Нет медикаментов\!_'
     else:
         return '_У тебя здоровье на максимуме\!_'
 async def drink(self):
     count = 10
     if self.thirst < 100 and self.water > 0:
         if self.thirst > 90:
             count = 100 - self.thirst
             DB.drink(self.id, count)
         else:
             DB.drink(self.id)
         return f'*Ты выпил освежающей воды\.*\n_\+ {count} к твоему водному балансу\._'
     elif self.water <= 0:
         return '_У тебя не хватает воды\!_'
     else:
         return '_Тебе не хочется пить\!_'
 async def eat(self):
     count = 10
     if self.hunger < 100 and self.foods > 0:
         if self.hunger > 90:
             count = 100-self.hunger
             DB.eating(self.id, count)
         else:
             DB.eating(self.id)
         return f'*Ты поел вкусной еды\.*\n_\+ {count} к сытости\._'
     elif self.foods <= 0:
         return '_У тебя не хватает еды\!_'
     else:
         return '_Ты не голоден\!_'
Beispiel #13
0
async def statistics_storage():
    show = DB.top_storage()

    text = '*📦Наибольшие запасы:*\n' + MONO + "\n"
    for i in show:

        text += f"{smile}{await str_num_2(i[0], 6)}{await str_num_2(i[1], 12)}\n"
    return text + MONO
Beispiel #14
0
async def play_dice(message):
    if DB.check_exploring(message.chat.id) is not None:
        await message.answer('Ты гуляешь\! Играть можно только дома\.')
    else:
        dice = await bot.send_dice(message.chat.id)
        await sleep(5)
        if dice.dice.value > message.dice.value:
            await message.answer('Моя взяла\!')
        elif dice.dice.value == message.dice.value:
            await message.answer('Ну ничья\.')
        else:
            await message.answer('Ты выиграл\!')
    async def end(self):
        chances = [
            CHANCES.paper(), CHANCES.foods(), CHANCES.water(), CHANCES.medicines(), CHANCES.masks(), CHANCES.drugs()
        ]
        if self.ill > 0:
            chances = tuple(map(lambda i: i//2, chances))
        illness = await CHANCES.ill(self.id)
        if illness != 0:
            if self.ill > illness:
                illness = self.ill
            sick = f'\n_\- Ты подхватил болезнь\!\nТебе необходимы медикаменты, чтобы поддерживать здоровье\.\n' \
                   f'Болезнь будет длиться где\-то {illness // 60} часов\._'
        else:
            sick = ''
            illness = self.ill
        world = await WORLD.show()
        if world['stocks'] <= 0:
            db.end_exploring(self.id)
            DB.set_exploring(self.id, 'NULL')
            return '*Путешествие окончилось\!*\n_Ты ничего не получил, так как все мировые запасы пустуют\!_'

        if world['stocks'] >= sum(chances):
            await WORLD.upd_stocks((-sum(chances)))
        else:
            x = world['stocks'] / sum(chances)
            chances = tuple(map(lambda i: round(i * x), chances))
            await WORLD.upd_stocks(-world['stocks'])
        event = await CHANCES.random_event()
        DB.end_exploring(self.id, chances[0], chances[1], chances[2], chances[3], chances[4], chances[5], illness,
                         event[0])
        db.end_exploring(self.id)

        return f'*Путешествие окончилось\!*\n_Ты получил:_\n`' \
               f'Бумаги:        {chances[0]}🧻\n' \
               f'Еды:           {chances[1]}🍖\n' \
               f'Воды:          {chances[2]}💧\n' \
               f'Медикаментов:  {chances[3]}💉\n' \
               f'Масок:         {chances[4]}😷\n' \
               f'Лекарств:      {chances[5]}💊\n`' + sick + event[1] + await self.new_level()
Beispiel #16
0
async def time_flow():
    messages = 0
    max_mes = 30
    time_is_now = DB.time_flow()
    if time_is_now:
        for user in time_is_now:
            exp_end = packages.Exploring(user[0])
            messages += 1
            await bot.send_message(user[0],
                                   await exp_end.end(),
                                   reply_markup=await KEY.inl_back(cb='home'))
            if messages == max_mes:
                max_mes += 30
                await sleep(1)
 def __init__(self, chat_id):
     self.id = chat_id
     self.info = DB.show_user_info(self.id)
     self.nickname = self.info[2]
     self.paper = self.info[4]
     self.foods = self.info[5]
     self.water = self.info[6]
     self.medicines = self.info[7]
     self.masks = self.info[8]
     self.drugs = self.info[9]
     self.hunger = self.info[10]
     self.thirst = self.info[11]
     self.health = self.info[12]
     self.level = self.info[13]
     self.experience = self.info[14]
     self.drug = self.info[15]
     self.ill = self.info[16]
     self.exploring = self.info[17]
     self.stayhome = self.info[18]
     self.sum_storage = sum((self.paper, self.foods, self.water, self.medicines, self.masks, self.drugs))
Beispiel #18
0
            'Для начала введи свой никнейм\.\nДоступны символы кириллицы, латиницы и цифры\.\n'
            'Максимальная длина ника \- 12, минимальная 4\.')

    else:
        name = DB.return_name(message.chat.id)
        if name is None:
            await message.answer(
                'Приветствую\! По\-моему, ты должен был ввести свой никнейм\. Введи его сейчас\!\n'
                '_Доступны символы кириллицы, латиницы и цифры\n'
                'Максимальная длина ника \- 12, минимальная 4\._')
        else:
            await message.answer(f'Привет, {name}\!',
                                 reply_markup=await KEY.main())


@dp.message_handler(lambda message: DB.return_name(message.chat.id) is None)
async def registration(message: types.Message):
    if message.text.isalnum() is False or (4 >= len(message.text) > 12):
        await message.answer('Такой никнейм не пойдет\.')
    elif DB.check_name(message.text) is not None:
        await message.answer('Это имя уже занято\!')
    else:
        await message.answer('Отлично\!\nЧто ж, удачи в выживании\!')
        DB.registered(message.chat.id, message.text)
        await sleep(1)
        await main(message)


@dp.message_handler(lambda message: message.chat.id == config.ADMIN,
                    commands='set_commands')
async def cmd_set_commands(message: types.Message):
 async def buy_drug(self, price=50):
     if self.paper >= price:
         DB.buy_drug(self.id, price)
         return '_Куплено лекарств\._'
     else:
         return '_Не хватает бумаги\!_'
Beispiel #20
0
async def statistics_stayhome():
    show = DB.top_stayhome()
    text = '*🕑Наидольше дома:*\n' + MONO + "\n"
    for i in show:
        text += f"{smile}{await str_num_2(i[0], 6)}{await str_num_2(i[1], 12)}\n"
    return text + MONO
    async def stocks(self): return DB.show_users_count() * randint(50, 100)

    def __init__(self, file='situation.world'):