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 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)
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 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 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)
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 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 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
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 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 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_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 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()