def event_list(msg):
    """

    Функция извлекает из базы данных все мероприятия, в которых
    пользователь является администратором или участником.

    """
    events = Events.select().where((Events.creator == msg.chat.id)
                                   & (Events.status == 0))
    if len(events) > 0:
        bot.send_message(msg.chat.id,
                         text='Ваши мероприятия:',
                         reply_markup=telebot.keyboard)
    count_admin = 1
    for i in events:
        event_information(msg, i, count_admin, 1)
        count_admin += 1
    count_member = 1
    for i in Events.select():
        if i.members.find(str(msg.chat.id)) != -1:
            if count_member == 1:
                bot.send_message(msg.chat.id,
                                 text='Мероприятия, на которые вы идёте:',
                                 reply_markup=telebot.keyboard)
            event_information(msg, i, count_member, 0)
            count_member += 1
    if count_admin == 1 and count_member == 1:
        bot.send_message(msg.chat.id,
                         text='У вас нет активных мероприятий',
                         reply_markup=telebot.keyboard)
def event_delete(call):
    telebot.keyboard = InlineKeyboardMarkup()
    event_id = call.data[6:]
    user_id = str(call.message.chat.id)
    try:
        chosen_event = Events.get(Events.id == event_id)
        if chosen_event.members.find(str(user_id)) != -1:
            chosen_event.members = chosen_event.members.replace(
                str(user_id), ' ')
            chosen_event.members = chosen_event.members.replace('  ', ' ')
            chosen_event.count -= 1
            telebot.keyboard.add(
                InlineKeyboardButton(text='Подробнее...',
                                     callback_data='info_' +
                                     str(chosen_event.id)))
            bot.send_message(
                int(chosen_event.creator),
                text='✉К сожалению, ваше мероприятие покинул человек!',
                reply_markup=telebot.keyboard)
            chosen_event.save()
        else:
            bot.answer_callback_query(call.id,
                                      text='Вы уже покинули это мероприятие')
    except Events.DoesNotExist:
        bot.send_message(call.message.chat.id,
                         text='Мероприятия не существует')
def event_info(call):
    try:
        event_id = call.data[5:]
        chosen_event = Events.get(Events.id == event_id)
        admin = Users.get(Users.id == chosen_event.creator)
        telebot.keyboard = InlineKeyboardMarkup()
        url = InlineKeyboardButton(text="Адрес",
                                   url="https://www.google.ru/maps/place/" +
                                   chosen_event.address)
        telebot.keyboard.add(url)
        text = '📄 Описание: {}\n⌚ Время: {}\n📅 Дата: {}'.format(
            chosen_event.text, str(chosen_event.time), str(chosen_event.date))
        text1 = '🙂 Создатель: {}\n{}\n📱 Телефон: {}\n📊 Репутация: {}'.format(
            admin.first_name, admin.last_name, admin.telephone,
            str(admin.reputation))
        bot.send_message(call.message.chat.id,
                         text=text,
                         reply_markup=telebot.keyboard)
        bot.send_message(call.message.chat.id, text=text1)
        text2 = 'Участники:' + '\n'
        for members in chosen_event.members.split():
            chosen_user = Users.get(Users.id == int(members))
            text2 += '🙂 {} {}\n📱 Телефон: {}'.format(chosen_user.first_name,
                                                     chosen_user.last_name,
                                                     chosen_user.telephone)
        if len(text2) > 11:
            bot.send_message(call.message.chat.id, text=text2)
    except Events.DoesNotExist or Users.DoesNotExist:
        pass
def cancel(msg):
    telebot.keyboard = ReplyKeyboardRemove()
    bot.send_message(msg.chat.id,
                     text='Действие отменено',
                     reply_markup=telebot.keyboard)
    telebot.action[msg.chat.id] = 'answer'
    try:
        chosen_event = Events.select().where(Events.count == -1).get()
        chosen_event.delete_instance()
        chosen_event.save()
    except Events.DoesNotExist:
        return
def event_delete(call):
    try:
        event_id = call.data[4:]
        chosen_event = Events.get(Events.id == event_id)
        for i in list(chosen_event.members.split()):
            bot.send_message(
                int(i),
                text='✉К сожалению создатель удалил мероприятие "' +
                chosen_event.text + '"')
        bot.send_message(chosen_event.creator,
                         text='✉Мероприятие успешно удалено')
        chosen_event.delete_instance()
        chosen_event.save()
    except Events.DoesNotExist:
        pass
def get_id():
    """

    Функция определяет свободный id при создании
    нового мероприятия.

    """
    try:
        user_id = 0
        for i in Events.select():
            if i.id > user_id:
                user_id = i.id
        user_id += 1
    except Events.DoesNotExist:
        user_id = 0
    return user_id
def event_create_step2(msg):
    """

    Функция определяет по статусу, на какой стадии
    находится создание мероприятия.
    Статус "1" - заполненяется ячейка категории мероприятия и описания
    Статус "2" - заполненяется ячейка времени и даты мероприятия
    Статус "3" - заполняется геолокация мероприятия
    Статус "4" - заполняется ячейка количества человек, производится рассылка
    приглашений, статус мероприятия становится "Успешно создано"


    """
    try:
        chosen_event = Events.select().where(
            (Events.count == -1) & (Events.creator == msg.chat.id)).get()
        if chosen_event.status == 1:
            if telebot.date == datetime.date(1, 1, 1):
                bot.send_message(msg.chat.id, text='Ты забыл ввести дату!')
                return
            chosen_event.date = telebot.date
            chosen_event.text = msg.text
            bot.send_message(msg.chat.id,
                             text='Укажите время мероприятия (формат HH:MM)')
            chosen_event.status = 2
            chosen_event.save()
        elif chosen_event.status == 2:
            try:
                chosen_event.time = datetime.time(int(msg.text[0:2]),
                                                  int(msg.text[3:5]))
                bot.send_message(
                    msg.chat.id,
                    text='Отправьте геолокацию с адресом мероприятия')
                chosen_event.status = 3
                chosen_event.save()
            except ValueError:
                bot.send_message(msg.chat.id,
                                 text='Проверь правильность ввода времени')
    except Events.DoesNotExist:
        bot.send_message(msg.chat.id,
                         text='Произошла ошибка при создании мероприятия')
def location(msg):
    if telebot.action[msg.chat.id] != 'event_create':
        telebot.keyboard = ReplyKeyboardRemove()
        user = Users.get(Users.id == msg.chat.id)
        user.latitude = msg.location.latitude
        user.longitude = msg.location.longitude
        user.save()
        bot.send_message(msg.chat.id,
                         text='Записал твою геолокацию, спасибо!',
                         reply_markup=telebot.keyboard)
        weather(msg, user.latitude, user.longitude)
    else:
        chosen_event = Events.select().where(
            (Events.count == -1) & (Events.creator == msg.chat.id)).get()
        chosen_event.address = str(msg.location.latitude) + ',' + str(
            msg.location.longitude)
        chosen_event.status = 4
        chosen_event.count = 0
        chosen_event.save()
        telebot.action[msg.chat.id] = 'answer'
        telebot.date = datetime.datetime(1, 1, 1)
        bot.send_message(msg.chat.id, text='Мероприятие успешно создано!')
        event_invite(msg)
def event_create_step1(msg):
    """

    Функция записывает категорию, выбранную пользователем и создаёт
    новое поле в таблице Events для дальнейшего заполнения.

    """
    get_calendar(msg)
    bot.send_message(
        msg.chat.id,
        text=
        'Ваша категория добавлена, теперь напишите краткое описание вашего мероприятия',
        reply_markup=telebot.keyboard)
    chosen_event = Events.create(id=get_id(),
                                 creator=msg.chat.id,
                                 date=datetime.date(1, 1, 1),
                                 time=datetime.time(0, 0, 0),
                                 text='NULL',
                                 count=-1,
                                 fun=msg.text,
                                 address='NULL',
                                 members='',
                                 status=1)
    chosen_event.save()
def event_invite(msg):
    """

    Функция осуществляет рассылку всем пользователям,
    у которых выбранна данная категория мероприятия.

    """
    chosen_event = Events.select().where((Events.creator == msg.chat.id)
                                         & (Events.status == 4)).get()
    for i in Users.select():
        if msg.chat.id != i.id and i.fun.find(chosen_event.fun) + 1:
            telebot.keyboard = InlineKeyboardMarkup()
            telebot.keyboard.add(
                InlineKeyboardButton(text='Хочу пойти',
                                     callback_data='ev_invite' +
                                     str(chosen_event.id)))
            bot.send_message(i.id,
                             text='✉\nНовое мероприятие! ' + '\n' +
                             '⌚Время: ' + str(chosen_event.time) + '\n' +
                             '📅Дата: ' + str(chosen_event.date) + '\n' +
                             '📄Описание:' + chosen_event.text,
                             reply_markup=telebot.keyboard)
    chosen_event.status = 0
    chosen_event.save()
Exemple #11
0
 def main(self):
     # Chama a função start que traz o roteiro inicial
     self.start()
     print("           Bem vindo, vamos começar o jogo!          ")
     # Roteiro do jogo até a grande final
     while len(self.cast) > 3:
         self.immunezed = False
         self.leaderVote = False
         self.othersVote = False
         self.thirdVote = False
         # cria a instância da prova do lider do modelo provas
         self.leaderProve = Prove(self.cast)
         print("________________________________________________________")
         # executa a prova do lider armazenando o lider
         self.leader = self.leaderProve.leader()
         # cria a instância da prova do anjo do modelo provas
         sleep(3)
         self.angelProve = Prove(self.cast)
         # executa a prova do anjo armazenando o anjo
         self.angel = self.angelProve.angel()
         # Cria a instância de eliminações
         self.elimination = Elimination(self.cast, self.leader, self.angel)
         # Esse método irá trazer o imunizado
         if len(self.cast) > 4:
             while self.immunezed == False:
                 self.immunezed = self.elimination.immunezed()
         # A seguir executa-se métodos que iram gerar os votos e emparedados
         while self.leaderVote == False:
             self.leaderVote = self.elimination.leadervote()
         while self.othersVote == False:
             self.othersVote = self.elimination.othersvote()
         while self.thirdVote == False:
             self.thirdVote = self.elimination.thirdperson()
         # Exibição ao player dos emparedados e imunizado
         print("----------------------------------------------------------")
         print(f'Vamos montar o paredão dessa semana!')
         print("----------------------------------------------------------")
         sleep(3)
         print(f"O anjo imunizou {self.immunezed.name}"
               ) if self.immunezed is not False else ""
         sleep(1)
         print(f"O voto do lider foi em: {self.leaderVote.name}")
         sleep(1)
         print(
             f"O grupo no confessionario votou em: {self.othersVote.name}")
         sleep(1)
         print(f"O terceiro a ir ao paredão é: {self.thirdVote.name}")
         sleep(1)
         print("----------------------------------------------------------")
         # Intervenção divina?
         greatWall = [self.leaderVote, self.othersVote, self.thirdVote]
         self.elimination.intervention(greatWall)
         # Método para eliminação
         print(f"Momento de tensão no sofá")
         sleep(1)
         print(
             f"Batimentos cardiacos: {self.leaderVote.name}: {randint(80, 140)}, {self.othersVote.name}: {randint(80, 140)}, {self.thirdVote.name}: {randint(80, 140)}"
         )
         sleep(2)
         self.elimination.toeliminate()
         sleep(2)
         print("O tempo continua e vamos para mais uma semana")
         sleep(1)
         print("...")
         print(
             "Listamos para você os principais acontecimentos da semana: ")
         event = Events()
         event.eventsAct(self.cast)
         sleep(3)
     print("Na casa restam apenas mais 3.")
     print("Isso significa que chegamos na grande final!")
     finalists = []
     for i in self.cast:
         finalists.append(i)
     final = Final(self.cast)
     final.theFinal()
     print("Obrigado por jogar nosso joguinho")
     print("Desenvolvido por BlackHAts")
Exemple #12
0
         i.delete_instance()
         i.save()
 except Reminder.DoesNotExist:
     pass
 try:
     user = Users.select().where((Users.weather == 1) & (
         Users.weather_time == datetime.time(time1.hour, time1.minute)))
     for i in user:
         bot.send_message(i.id,
                          text=telebot.weather_text(i.latitude,
                                                    i.longitude))
 except Users.DoesNotExist:
     pass
 try:
     event = Events.select().where(
         (Events.time == datetime.time(time1.hour, time1.minute))
         & (Events.date == datetime.date(date.year, date.month, date.day))
         & (Events.status == 0))
     for i in event:  # i - выбранное мероприятие
         cut = i.address.find(",")
         bot.send_message(int(i.creator),
                          text=telebot.weather_text(
                              float(i.address[:cut]),
                              float(i.address[cut + 1:])))
         i.status = -1
         i.save()
         cut = i.address.find(",")
         bot.send_message(
             int(i.creator),
             text=
             '✉\nВаше мероприятие "{}" началось! \nКоличество участников: {}'
             '\nНе забудьте поставить оценку приглашённым для рейтинга.'.
def event_call(call):
    if call.data[0:9] == 'ev_invite':
        try:
            chosen_user = Users.get(Users.id == call.message.chat.id)
            chosen_event = Events.get(Events.id == int(call.data[9:]))
            if chosen_event.members.find(str(call.message.chat.id)) == -1:
                telebot.keyboard = InlineKeyboardMarkup()
                telebot.keyboard.add(
                    InlineKeyboardButton(text='Принять',
                                         callback_data='ev_accept' +
                                         str(chosen_event.id) + ':' +
                                         str(call.message.chat.id)))
                telebot.keyboard.add(
                    InlineKeyboardButton(text='Отклонить',
                                         callback_data='ev_reject' +
                                         str(chosen_event.id) + ':' +
                                         str(call.message.chat.id)))
                bot.send_message(
                    chosen_event.creator,
                    text='✉\nНа ваше мероприятие записался человек!\n🙂 {} {}\n'
                    '📊 Репутация: {}\n📱 Телефон: {}'.format(
                        chosen_user.first_name, chosen_user.last_name,
                        str(chosen_user.reputation), chosen_user.telephone),
                    reply_markup=telebot.keyboard)
                bot.edit_message_text("Ваша заявка отправлена",
                                      call.from_user.id,
                                      call.message.message_id)
        except Users.DoesNotExist or Events.DoesNotExist:
            bot.send_message(
                call.message.chat.id,
                text="К сожалению, мероприятия больше не существует")
    elif call.data[0:9] == 'ev_accept':
        event_id = int(call.data[9:call.data.find(':')])
        user_id = int(call.data[call.data.find(':') + 1:])
        chosen_event = Events.get(Events.id == event_id)
        if chosen_event.members.find(str(user_id)) == -1:
            telebot.keyboard = InlineKeyboardMarkup()
            url = InlineKeyboardButton(
                text="Адрес",
                url="https://www.google.ru/maps/place/" + chosen_event.address)
            telebot.keyboard.add(url)
            bot.send_message(
                user_id,
                text=
                '✉\nВаша заявка одобрена!\n⌚ Время: {}\n📅 Дата: {}\n📄 Описание: {}'
                .format(str(chosen_event.time), str(chosen_event.date),
                        chosen_event.text),
                reply_markup=telebot.keyboard)
            chosen_event.count += 1
            chosen_event.members += str(user_id) + ' '
            chosen_event.save()
            bot.send_message(
                chosen_event.creator,
                text=
                'Пользователю отправлена полная информация о мероприятии...')
        else:
            bot.send_message(
                chosen_event.creator,
                text='Этот пользователь уже приглашён на мероприятие')

    elif call.data[0:9] == 'ev_reject':
        event_id = int(call.data[9:call.data.find(':')])
        creator = int(call.data[call.data.find(':') + 1:])
        chosen_event = Events.get(Events.id == event_id)
        bot.send_message(creator,
                         text='✉\nВаша заявка на мероприятие: "' +
                         chosen_event.text + '" отклонена!')