Python| Реализовать функцию Отзывы

Utkaworlddd

Новичок
Пользователь
Окт 16, 2023
1
0
1
Реализовать функцию Отзывы. Пользователь может оставить свой отзыв в вкладке Отзывы ✉️. После того, как он отправил свой отзыв, его отзыв пересылается в частную группу администрации (как и в функции Тех.Поддержка). На пересланном сообщении появляется 2 кнопки. 1.Отклонить, 2.Принять. При принятии отзыва, он сохраняется во вкладке Отзывы ✉️ и имеет Тег пользователя, который оставил отзыв и доступен всем, кто откроет вкладку отзывы.


У Администратора ([Айди] @Utkaworlddd) под каждым отзывом появляется кнопка удалить, Администратор может удалить отзыв!


При выборе вкладки "Отзывы ✉️", пользователю предоставляется возможность написать свой отзыв. После отправки отзыва, он пересылается в частную группу администрации. На пересланном сообщении в частной группе администрации появляются две кнопки: "Отклонить" и "Принять". Если администрация принимает отзыв, он сохраняется в словаре reviews и отображается в вкладке "Отзывы ✉️" с тегом пользователя. У администратора под каждым отзывом в вкладке "Отзывы ✉️" появляется кнопка "Удалить", позволяющая удалять отзывы


Код
Python:
import telebot

from telebot.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton
from telebot import types

TOKEN = '**Токен сам вставлю**'
bot = telebot.TeleBot(TOKEN)
PRIVATE_GROUP_LINK = 'https://t.me/+tluT95-yWYk2ZmNi'
ADMIN_CHAT_ID = '-1001953216898'
ADMIN_USER_ID = 5406293856

users_in_support_mode = set()
forwarded_messages = {}
reviews = {}
review_message_ids = {}

@bot.message_handler(commands=['start'])
def send_welcome(message):
    markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
    btn1 = types.KeyboardButton('Голда 🏆')
    btn2 = types.KeyboardButton('Профиль 👤')
    btn3 = types.KeyboardButton('Тех.Поддержка 🛠')
    btn4 = types.KeyboardButton('Отзывы ✉️')
    markup.add(btn1, btn2, btn3, btn4)
    bot.send_message(message.chat.id, "Добро пожаловать! Выберите одну из опций:", reply_markup=markup)

@bot.message_handler(func=lambda message: message.text == 'Отзывы ✉️')
def handle_reviews(message):
    user_id = message.chat.id
    if user_id == ADMIN_USER_ID:
        for review, user_tag in reviews.items():
            markup = InlineKeyboardMarkup()
            delete_btn = InlineKeyboardButton("Удалить", callback_data=f"delete_{review}")
            markup.add(delete_btn)
            bot.send_message(user_id, f"{user_tag}: {review}", reply_markup=markup)
    else:
        markup = ReplyKeyboardMarkup(resize_keyboard=True)
        stop_button = KeyboardButton("СТОП")
        markup.add(stop_button)
        bot.send_message(user_id, "Введите ваш отзыв:", reply_markup=markup)

@bot.message_handler(func=lambda message: True)
def echo_all(message):
    user_id = message.chat.id
    stop_button = types.KeyboardButton("СТОП")
    stop_keyboard = types.ReplyKeyboardMarkup().add(stop_button)

    if message.text == 'Тех.Поддержка 🛠':
        users_in_support_mode.add(user_id)
        bot.send_message(user_id, "Введите сообщение, которое хотите передать администратору.", reply_markup=stop_keyboard)
        return

    if message.text == 'Главное меню':
        markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
        btn1 = types.KeyboardButton('Голда 🏆')
        btn2 = types.KeyboardButton('Профиль 👤')
        btn3 = types.KeyboardButton('Тех.Поддержка 🛠')
        btn4 = types.KeyboardButton('Отзывы ✉️')
        markup.add(btn1, btn2, btn3, btn4)
        bot.send_message(user_id, "Вы вернулись в главное меню. Выберите одну из опций:", reply_markup=markup)
        return

    if user_id in users_in_support_mode:
        if message.text == 'СТОП':
            users_in_support_mode.remove(user_id)
            markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True)
            btn1 = types.KeyboardButton('Голда 🏆')
            btn2 = types.KeyboardButton('Профиль 👤')
            btn3 = types.KeyboardButton('Тех.Поддержка 🛠')
            btn4 = types.KeyboardButton('Отзывы ✉️')
            markup.add(btn1, btn2, btn3, btn4)
            bot.send_message(user_id, "Вы вышли из режима поддержки.", reply_markup=markup)
            bot.send_message(user_id, "Для возобновления общения, выберите опцию из главного меню.")
            return

        forwarded_message = bot.forward_message(ADMIN_CHAT_ID, user_id, message.message_id)
        forwarded_messages[forwarded_message.message_id] = user_id
        bot.send_message(user_id, "Сообщение передано администратору. Спасибо!", reply_markup=stop_keyboard)
        return

    if message.reply_to_message and message.reply_to_message.message_id in forwarded_messages:
        target_user_id = forwarded_messages[message.reply_to_message.message_id]
        bot.send_message(target_user_id, message.text)
    if message.text.startswith("Отзыв: "):
        review = message.text[8:]
        reviews[review] = f"@{message.from_user.username}" if message.from_user.username else str(message.from_user.id)
        markup = InlineKeyboardMarkup()
        accept_btn = InlineKeyboardButton("Принять", callback_data=f"accept_{review}")
        decline_btn = InlineKeyboardButton("Отклонить", callback_data=f"decline_{review}")
        markup.add(accept_btn, decline_btn)
        sent_message = bot.forward_message(PRIVATE_GROUP_LINK, message.chat.id, message.message_id)
        bot.edit_message_reply_markup(chat_id=PRIVATE_GROUP_LINK, message_id=sent_message.message_id, reply_markup=markup)
        review_message_ids[sent_message.message_id] = review

@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
    if call.data.startswith("accept_"):
        review = call.data[8:]
        bot.answer_callback_query(call.id, "Отзыв принят!")
        bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.message_id)
    elif call.data.startswith("decline_"):
        review = call.data[8:]
        bot.answer_callback_query(call.id, "Отзыв отклонен!")
        bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.message_id)
        del reviews[review]
    elif call.data.startswith("delete_"):
        review = call.data[7:]
        bot.answer_callback_query(call.id, "Отзыв удален!")
        del reviews[review]

bot.polling()

Функция Отзывы ✉️ просто не отоброжается, миллиард методов попробовал, но всё тчетно, помогите пожалуйста!

1697468711737.png
 

Форум IT Специалистов