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 find_friend(msg):
    if not access(msg):
        return
    """

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

    """
    user = Users.get(Users.id == msg.chat.id)
    hobbies = list(user.hobbies.split())
    bot.send_message(msg.chat.id, text='Выполняю поиск...')
    for i in hobbies:
        for j in Users.select():
            hobbies_friend = list(j.hobbies.split())
            if i in hobbies_friend and j.id != user.id:
                bot.send_message(j.id,
                                 text='Я нашёл тебе друга!\n🙂 {} {}\n'
                                 '📊 Репутация: {}\n'
                                 '📱 Телефон: {}'.format(
                                     user.first_name, user.last_name,
                                     str(user.reputation), user.telephone))
                bot.send_message(msg.chat.id,
                                 text='Я нашёл тебе друга!\n🙂 {} {}\n'
                                 '📊Репутация: {}\n'
                                 '📱Телефон: {}'.format(j.first_name,
                                                       j.last_name,
                                                       str(j.reputation),
                                                       j.telephone))
                return
    bot.send_message(msg.chat.id, text='Друг не найден(')
 def register(self, cognito:str, email) -> bool:
      user = Users.objects(cognito_id=cognito)
      print("In register")
      if user:
          return False
      det = UserDetails(email=email,tags=[])
      user = Users(cognito_id=cognito, details = det,followers=Followers(),following=Following(),direct_chats=[],reporters_members=[],viewers=[],communities=[],profile_posts=[],blocked=[])
      user.save()
      return True
def phone(msg):
    chosen_user = Users.get(Users.id == msg.chat.id)
    chosen_user.telephone = msg.contact.phone_number
    chosen_user.save()
    if telebot.action[msg.chat.id] == 'reg_hobbies':
        telebot.keyboard = ReplyKeyboardRemove()
        value_reg(msg)
Beispiel #5
0
async def hello(msg: types.Message):
    await bot.send_message(msg.from_user.id,
                           f"Hello {msg.from_user.first_name}!",
                           reply_markup=menu_btns)
    global id_
    id_ = msg.from_user.id
    users[id_] = Users(f'{id_}')
def access(msg):
    chosen_user = Users.get(Users.id == msg.chat.id)
    if chosen_user.telephone == 'NULL':
        bot.send_message(msg.chat.id,
                         text='У вас нет доступа к этой комманде',
                         reply_markup=telebot.keyboard)
        return False
    else:
        return True
def delete(msg):
    """

    Функция используется только администратором

    """
    chosen_user = Users.get(Users.id == msg.chat.id)
    chosen_user.delete_instance()
    bot.send_message(msg.chat.id,
                     text='Вы были успешно удалены из базы данных')
def receive_message(msg):
    if msg.chat.id not in telebot.action.keys():
        telebot.action[msg.chat.id] = 'answer'
    try:
        chosen_user = Users.get(Users.id == msg.chat.id)
        chosen_user.save()
    except Users.DoesNotExist:
        hello(msg)

    actions(msg)
def fun_call(call):
    if call.data == 'fun_end':
        fun_call_end(call)
        return
    chosen_fun = telebot.lines[int(call.data[4:])]
    user = Users.get(Users.id == call.message.chat.id)
    if telebot.action[call.message.chat.id] == 'fun_add':
        fun_call_add(call, chosen_fun, user)
    if telebot.action[call.message.chat.id] == 'fun_remove':
        fun_call_remove(call, chosen_fun, user)
Beispiel #10
0
async def hello(msg: types.Message):
    await bot.send_message(
        msg.from_user.id,
        f"Прекрасный день для закупок {msg.from_user.first_name}!",
        'Согласен?',
        reply_markup=menu_btns)
    global id_
    id_ = msg.from_user.id
    users[id_] = Users(f'{id_}')
    await Form.starting.set()
def receive_weather(msg):
    user = Users.get(Users.id == msg.chat.id)
    if user.latitude == 0 or user.longitude == 0:
        telebot.keyboard = ReplyKeyboardMarkup()
        telebot.keyboard.add(
            KeyboardButton("Отправить геолокацию", request_location=True))
        bot.send_message(msg.chat.id,
                         text='Прости, но я не знаю твоей геолокации:(',
                         reply_markup=telebot.keyboard)
        return
    else:
        weather(msg, user.latitude, user.longitude)
        def test_sign_in_doctor(self, check_hash):
            with app.app_context():
                # записываем в БД эту запись
                user = User(sign_login='******',
                            sign_password='******',
                            sign_role=2)
                db.session.add(user)
                db.session.commit()

                # создаем экземпляр класса Users
                user = Users('login2', 'password2')
                assert user.sign_in(check_hash) == 'doctor_space'
 def get_users_by_name(self,name):
     users = Users.objects(details__name__icontains=name)
     res = {}
     for i,user in enumerate(users):
         res_part={}
         res_part["id"] = user.id
         res_part["name"] = user.details.name
         res_part["pp"] = user.details.pp
         res_part["email"] = user.details.email
         res_part["about"] = user.details.about
         res[i] = res_part
     return res
Beispiel #14
0
async def hello(msg: types.Message):
    if msg.from_user.id == ID:
        await bot.send_message(msg.from_user.id,
                               f"Привет Админ!!",
                               reply_markup=admin_buttons)
    else:
        await bot.send_message(msg.from_user.id,
                               f"Привет {msg.from_user.first_name}!",
                               reply_markup=menu_btns)
        await States_.state_menu.set()
        global id_
        id_ = msg.from_user.id
        users[id_] = Users(f'{id_}')
def hello(msg):
    """

    Функция проверяет наличие пользователя в базе данных.
    Если его нет - создаётся новая ячейка, в которую записывается
    id чата пользователя.
    Если он есть - бот отправляет приветствие.

    """
    try:
        user = Users.get(Users.id == msg.chat.id)
        bot.send_message(
            msg.chat.id,
            text=
            'Приветствую вас, {}!\nЕсли вам нужна помощь, используйте команду /help'
            .format(user.first_name))
    except Users.DoesNotExist:
        bot.send_message(msg.chat.id,
                         text="Привет! Рад с тобой познакомиться!")
        first_name = msg.from_user.first_name
        last_name = msg.from_user.last_name
        if msg.from_user.first_name is None:
            first_name = 'Unnamed'
        if msg.from_user.last_name is None:
            last_name = ' '
        chosen_user = Users.create(id=msg.chat.id,
                                   telephone='NULL',
                                   hobbies='',
                                   first_name=first_name,
                                   last_name=last_name,
                                   reputation=0,
                                   latitude=0.0,
                                   longitude=0.0,
                                   weather=0,
                                   weather_time=datetime.time(0, 0, 0),
                                   fun='')
        chosen_user.save()
        registration(msg)
def value_reg(msg):
    """

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

    """
    user = Users.get(Users.id == msg.chat.id)
    telebot.keyboard = ReplyKeyboardRemove()
    if 'Я прочитал и ознакомился с правилами' == msg.text or telebot.action[msg.chat.id] == 'reg_hobbies' or \
            telebot.action[msg.chat.id] == 'reg_end':
        if telebot.action[msg.chat.id] == 'reg_telephone':
            telebot.keyboard = ReplyKeyboardMarkup()
            bot.send_message(
                msg.chat.id,
                text=
                "Отлично! Теперь тебе нужно внести данные, это не займёт много времени!",
                reply_markup=telebot.keyboard)
            telebot.keyboard.add(
                KeyboardButton("Отправить номер телефона",
                               request_contact=True))
            bot.send_message(msg.chat.id,
                             text='Отправь мне свой номер телефона',
                             reply_markup=telebot.keyboard)
            telebot.action[msg.chat.id] = 'reg_hobbies'
        elif telebot.action[msg.chat.id] == 'reg_hobbies':
            bot.send_message(
                msg.chat.id,
                text=
                'Записал твой номер. Теперь отметь хэштэги по своим интересам, чтобы другим людям '
                'было проще найти тебя.',
                reply_markup=telebot.keyboard)
            user.country = msg.text
            user.save()
            telebot.action[msg.chat.id] = 'reg_end'
        elif telebot.action[msg.chat.id] == 'reg_end':
            bot.send_message(
                msg.chat.id,
                text='Записал твои хобби, спасибо за регистрацию!')
            user.hobbies += msg.text
            user.save()
            fun_adding(msg)
    elif msg.text == 'Я отказываюсь предоставлять доступ к моим данным':
        telebot.keyboard = ReplyKeyboardRemove()
        bot.send_message(
            msg.chat.id,
            text=
            'В таком случае вы не будете иметь доступ к коммандам\n/events, '
            '/find_friend, /fun',
            reply_markup=telebot.keyboard)
def receive_reputation(msg):
    user = Users.get(Users.id == msg.chat.id)
    if 2 > user.reputation > -2:
        bot.send_message(msg.chat.id,
                         text='Твоя репутация: ' + str(user.reputation) +
                         ' (нейтральная)')
    elif int(user.reputation) > 2:
        bot.send_message(msg.chat.id,
                         text='Твоя репутация: ' + str(user.reputation) +
                         ' (к тебе хорошо относятся другие пользователи)')
    else:
        bot.send_message(msg.chat.id,
                         text='Твоя репутация: ' + str(user.reputation) +
                         ' (к тебе плохо относятся другие пользователи)')
def weather(msg, latitude, longitude):
    """

    Функция отправляет пользователю актуальную погоду и
    предлагает включить уведомление на каждый день.

    """
    bot.send_message(msg.chat.id,
                     text=telebot.weather_text(latitude, longitude))
    user = Users.get(Users.id == msg.chat.id)
    if user.weather == 0:
        telebot.keyboard = ReplyKeyboardMarkup()
        telebot.keyboard.add(KeyboardButton('Да'), KeyboardButton('Нет'))
        bot.send_message(
            msg.chat.id,
            text="Хочешь, чтобы я сообщал тебе погоду каждый день?",
            reply_markup=telebot.keyboard)
        telebot.action[msg.chat.id] = 'weather_reg'
        return
Beispiel #19
0
def get_user(chosen_member, members, is_creator):
    """

    Функция извлекает информацию о пользователе по его id
    и добавляет кнопки для оценки

    """
    keyboard = InlineKeyboardMarkup()
    keyboard.add(
        InlineKeyboardButton(text='👍', callback_data='rep+_' + str(members)))
    keyboard.add(
        InlineKeyboardButton(text='👎', callback_data='rep-_' + str(members)))
    chosen_user = Users.get(Users.id == int(members))
    if is_creator == 1:
        text1 = '🔻' + chosen_user.first_name + ' ' + chosen_user.last_name
    else:
        text1 = chosen_user.first_name + ' ' + chosen_user.last_name
    bot.send_message(int(chosen_member), text=text1)
    bot.send_message(int(chosen_member),
                     text="*поставьте оценку*",
                     reply_markup=keyboard)
def weather_reg(msg):
    """

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

    """
    user = Users.get(Users.id == msg.chat.id)
    if telebot.action[msg.chat.id] == 'weather_reg':
        if msg.text == 'Да' or msg.text == 'да':
            user.weather = 1
            user.save()
            telebot.keyboard = ReplyKeyboardRemove()
            bot.send_message(
                msg.chat.id,
                text='В какое время ты бы хотел получать уведомления?',
                reply_markup=telebot.keyboard)
            telebot.action[msg.chat.id] = 'weather_reg1'
        if msg.text == 'Нет' or msg.text == 'нет':
            user.weather = -1
            user.save()
            telebot.keyboard = ReplyKeyboardRemove()
            bot.send_message(msg.chat.id,
                             text="Хорошо, как скажешь)",
                             reply_markup=telebot.keyboard)
    else:
        try:
            user.weather_time = datetime.time(int(msg.text[0:2]),
                                              int(msg.text[3:5]))
            bot.send_message(
                msg.chat.id,
                text='Хорошо! Буду тебя предупреждать каждый день в ' +
                msg.text,
                reply_markup=telebot.keyboard)
            telebot.action[msg.chat.id] = 'answer'
            user.save()
        except Users.DoesNotExist or TypeError:
            bot.send_message(msg.chat.id,
                             text='Не правильный ввод, повтори ещё раз!',
                             reply_markup=telebot.keyboard)
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_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()
Beispiel #23
0
def display_users():
    return Users.display_users()
Beispiel #24
0
def save_user(user):
    return Users.save_user(user)
 def remove_follower(self,followers_id):
     self.user.update_one(pull__followers__active__with_id=followers_id)
     Users.objects(id=followers_id).update_one(pull__following__active__with_id=self.user.id)
Beispiel #26
0
while True:
    time1 = datetime.datetime.today()
    date = datetime.date.today()
    try:
        reminder = Reminder.select().where(
            (Reminder.time == datetime.time(time1.hour, time1.minute)) &
            (Reminder.date == datetime.date(date.year, date.month, date.day)))
        for i in reminder:
            bot.send_message(i.id,
                             text='🗓\nДолжен тебе напомнить:' + '\n' + i.text)
            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(
def rep_positive(call):
    user = Users.get(Users.id == int(call.data[5:]))
    user.reputation -= 1
    bot.edit_message_text("*пользователь оценён*", call.from_user.id,
                          call.message.message_id)
    user.save()
Beispiel #28
0
def create_user(user_name, full_name, password):
    new_user = Users(user_name, full_name, password)
    return new_user
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 + '" отклонена!')
def answer(msg):
    """

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

    """
    text = msg.text.lower()
    for i in telebot.words.welcome:
        i = i.lower()
        if i.find(text) != -1:
            return telebot.words.welcome[random.randint(
                0,
                len(telebot.words.welcome) - 1)]
    for i in telebot.words.leave:
        i = i.lower()
        if i.find(text) != -1:
            return telebot.words.leave[random.randint(
                0,
                len(telebot.words.leave) - 1)]
    if text.find("как") + 1 and text.find("дела") + 1:
        telebot.keyboard = ReplyKeyboardMarkup()
        telebot.keyboard.add(
            KeyboardButton("Плохо" + telebot.emoji.pictures['грусть']),
            KeyboardButton("Хорошо" + telebot.emoji.pictures['улыбка']),
            KeyboardButton("Отлично" + telebot.emoji.pictures['улыбка1']))
        return "У меня всё хорошо, а у вас?"
    elif text.find('!#!') + 1:  # функция используется только администратором
        for i in Users.select():
            if i.id != msg.chat.id:
                bot.send_message(i.id, text='БОГ: ' + msg.text[4:])
        bot.send_message(msg.chat.id,
                         text='Ваше сообщение отправлено всем пользователям!')
    elif text.find("плохо") + 1:
        telebot.keyboard = ReplyKeyboardRemove()
        return "Надеюсь, что в скором времени будет хорошо:)" + telebot.emoji.pictures[
            'подмигивание']
    elif text.find("хорошо") + 1:
        telebot.keyboard = ReplyKeyboardRemove()
        return "Рад за вас!"
    elif text.find("отлично") + 1:
        telebot.keyboard = ReplyKeyboardRemove()
        return "Это просто прекрасно!"
    elif text.find("погода") + 1 or text.find("погоду") + 1 or text.find(
            "погоде") + 1 or text.find("погодой") + 1:
        receive_weather(msg)
    elif text.find("отзыв") + 1:
        review(msg)
    elif text.find('репутация') + 1:
        receive_reputation(msg)
    elif text.find('поменя') + 1 and text.find('время') + 1 and text.find(
            'уведомлени') + 1:
        receive_change_weather(msg)
    elif text.find('найди') + 1 and text.find('друга'):
        find_friend(msg)
    elif text.find('напомин') + 1 or text.find('напомни') + 1:
        receive_memory(msg)
    elif text.find('развлечен') + 1:
        receive_fun(msg)
    elif text.find('мероприяти') + 1:
        receive_event(msg)
    else:
        bot.send_message(msg.chat.id, text='Я тебя не понимаю')