Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 14.11.2022
Сообщений: 33

Написать телеграм-бота в духе простенького dating-сервиса

07.06.2023, 14:19. Показов 695. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо написать телеграм-бота в духе такого простенького dating-сервиса. Но есть ряд проблем. На этапе выбора интересов бот всегда пишет: "Ошибка! Пожалуйста, заполните анкету, чтобы выбрать интересы." А потом ему отправляешь абсолютно любое сообщение и он пишет: "Отлично! Теперь отправьте несколько фотографий." Потом уже отправишь ему пару рандомных фоток - и ничего не происходит. Подскажите, как решить эти проблемы, чтобы всё чётко работало? Подкорректировать как-то код, что-то изменить...

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import telebot
from telebot import types
import numpy as np
from scipy import spatial
# Токен бота для Telegram API
TOKEN = 'тут токен'
# Создание экземпляра бота
bot = telebot.TeleBot(TOKEN)
# Список анкет пользователей (возраст, пол, интересы, фотографии)
user_profiles = []
# Очередь поиска (id пользователей)
search_queue = []
# Список мэтчей (id первого пользователя -> [id второго пользователя, ...])
matches = {}
# Клавиатура для выбора интересов
interests_kb = types.InlineKeyboardMarkup(row_width=2)
interests_kb.add(*[types.InlineKeyboardButton(text=interest, callback_data=interest) for interest in ['Фильмы', 'Музыка', 'Спорт', 'Книги', 'Путешествия']])
# Функция для получения анкеты пользователя
def get_profile(message):
    chat_id = message.chat.id
    # Проверка, есть ли уже профиль пользователя
    profile = [p for p in user_profiles if p[0] == chat_id]
    if len(profile) > 0:
        return profile[0]
    # Создание нового профиля
    bot.send_message(chat_id, "Добро пожаловать! Заполните анкету, чтобы начать использовать бота.")
    bot.send_message(chat_id, "Пожалуйста, введите свои данные: возраст, пол, интересы.")
    user_profiles.append([chat_id])
    return user_profiles[-1]
# Обработчик команды /start для регистрации пользователя
@bot.message_handler(commands=['start'])
def start_handler(message):
    get_profile(message)
# Обработчик текстовых сообщений
@bot.message_handler(func=lambda message: True)
def message_handler(message):
    chat_id = message.chat.id
    # Определение профиля пользователя
    profile = get_profile(message)
    # Заполнение анкеты
    if len(profile) == 1:
        try:
            profile.append(int(message.text.strip()))
            bot.send_message(chat_id, "Пожалуйста, укажите ваш пол (м или ж).")
        except:
            bot.send_message(chat_id, "Неправильный формат! Пожалуйста, введите только цифры.")
    elif len(profile) == 2:
        if message.text.strip().lower() in ['м', 'ж']:
            profile.append(message.text.strip().lower())
            bot.send_message(chat_id, "Пожалуйста, выберите ваши интересы.", reply_markup=interests_kb)
        else:
            bot.send_message(chat_id, "Неправильный формат! Пожалуйста, введите ваш пол (м или ж).")
    # Сбор информации об интересах пользователя
    elif len(profile) == 3:
        profile.append([message.text.strip()])
        bot.send_message(chat_id, "Отлично! Теперь отправьте несколько фотографий.")
    elif len(profile) == 4:
        if message.photo:
            photo = message.photo[-1].file_id
            profile[-1].append(photo)
            bot.send_message(chat_id, "Спасибо! Ваш профиль успешно создан.")
        else:
            bot.send_message(chat_id, "Вы должны отправить фотографии!")
# Функция для определения схожести двух профилей
def cosine_similarity(v1, v2):
    return 1 - spatial.distance.cosine(v1, v2)
# Функция для получения наиболее подходящих профилей для пользователя
def recommend_profiles(user_profile, num_recommendations=10):
    similarity_scores = []
    for profile in user_profiles:
        if user_profile[0] != profile[0]:
            similarity_score = cosine_similarity(user_profile[2], profile[2])
            similarity_scores.append((profile[0], similarity_score))
    top_scores_indices = np.array(sorted(similarity_scores, key=lambda x: x[1], reverse=True)[:num_recommendations])[:,0]
    return top_scores_indices
# Обработчик команды /search для поиска подходящих профилей
@bot.message_handler(commands=['search'])
def search_profiles(message):
    chat_id = message.chat.id
    # Получение профиля пользователя
    user_profile = get_profile(message)
    # Поиск подходящих профилей
    recommended_profiles = recommend_profiles(user_profile)
    # Добавление пользователей в очередь поиска
    search_queue.extend(recommended_profiles)
    # Отправка сообщения пользователю
    bot.send_message(chat_id, "Найдено {} подходящих профилей. Нажмите Like, чтобы оценить профиль, или /search для поиска новых профилей.".format(len(recommended_profiles)))
# Обработчик команды /like для лайкания профиля
@bot.message_handler(commands=['like'])
def like_profile(message):
    chat_id = message.chat.id
    # Проверка на наличие профиля и соответствующее сообщение пользователю
    if len(user_profiles) <= 1:
        bot.send_message(chat_id, "Нет других пользователей на данный момент.")
        return
    # Получение последнего профиля в списке
    user_profile = user_profiles[-1]
    # Поиск профиля на основе id из очереди поиска
    if len(search_queue) == 0:
        bot.send_message(chat_id, "Нет других пользователей на данный момент.")
        return
    profile_id = search_queue.pop(0)
    profile = [p for p in user_profiles if p[0] == profile_id][0]
    # Обработка лайка профиля
    if profile_id not in matches.get(user_profile[0], []):
        if chat_id in matches:
            matches[chat_id].append(profile_id)
        else:
            matches[chat_id] = [profile_id]
        # Отправка сообщения об успешном лайке
        if user_profile[0] in matches.get(profile[0], []):
            bot.send_message(chat_id, "{} понравился вам тоже! Вы сделали мэтч!".format(profile_id))
            bot.send_message(profile_id, "{} понравился вам тоже! Вы сделали мэтч!".format(user_profile[0]))
        else:
            bot.send_message(chat_id, "{} понравился вам!".format(profile_id))
    else:
        bot.send_message(chat_id, "Вы уже лайкали профиль {}!".format(profile_id))
 
# Обработчик кнопок выбора интересов
@bot.callback_query_handler(func=lambda call: True)
def interest_callback(call):
    chat_id = call.message.chat.id
    message_id = call.message.message_id
    user_profile = [p for p in user_profiles if p[0] == chat_id][0]
    # Проверка, что профиль пользователя содержит информацию об интересах
    if len(user_profile) <= 3:
        bot.send_message(chat_id, "Ошибка! Пожалуйста, заполните анкету, чтобы выбрать интересы.")
    else:
        user_profile[2].extend([call.data])
        bot.edit_message_text(text="Вы выбрали {}.".format(call.data), chat_id=chat_id, message_id=message_id, reply_markup=None)
# Запуск бота
bot.polling()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2023, 14:19
Ответы с готовыми решениями:

MVP dating-сервиса
Помогите,не получается сделать правильно условия: Мы делаем MVP dating-сервиса, и у нас есть список парней и девушек (их число...

Как заставить что-то написать моего телеграм бота в мой тг-чат?
Зарегистрировал в Botfather тг-бота получил токен бота и добавил бота в админы в мой тг-чат. Вопрос: Как этим ботом написать что-то в...

Не пойму как написать алгоритм для одной функции телеграм бота (openweathermap)
Я делаю погодного телеграмм бота и в нем есть функционал, который, в конечном результате, должен отправлять юзеру уведомления о выбранном...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2023, 14:19
Помогаю со студенческими работами здесь

Написал простенького бота (telegram) на python`e . Не работает на ubuntu server
своя OC - ubuntu 18.10 OC на сервере - Ubuntu 18.04 (LTS) x64 (DigitalOcean) Написал простенького бота на python`e который...

Создание телеграм бота
Всем доброго времени суток! Заинтересовался созданием телеграм бота и столкнулся с проблемой... Мне нужно сделать бота, который раз в сутки...

Оптимизация телеграм бота
Пытаюсь сделать телеграм бота для поиска. Вроде бы все готово, но вот проблема, def s работает слишком долго и отправляет сообщение...

PHP Бота телеграм
Ребята нужна помощь Скрипт установлен работает, ну не работает пару функций бота нужно пересмотреть исходняк дам весь доступ к...

Создание телеграм-бота
public class Bot extends TelegramLongPollingBot { public static void main(String args) { ApiContextInitializer.init(); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru