@JORIKUSS

Telebot. Как отправить сообщение другому пользователю?

Я недавно начал изучать библиотеку pytelegrambotapi. Решил попробовать написать бота, который принимает заказы.
Когда заказ написан, бот отправляет его на аккаунт с chat_id, который записан в переменной owner. Там появляется Inlain клавиатура с кнопкой принять. После нажатия этой кнопки пользователю, который сделал заказ, отправляется сообщение. Chat_id этого пользователя предварительно записывается в переменную user. Но когда ботом пользуется несколько человек одновременно, бот запоминает последний chat_id и не отправляет сообщение предыдущему пользователю. Помогите, пожалуйста, решить эту проблему.

import telebot
from telebot import types

owner=chat_id
bot=telebot.TeleBot('token')

@bot.message_handler(commands=['start'])
def start(message):
    key=types.ReplyKeyboardMarkup()
    button1=types.KeyboardButton('Меню')
    button2=types.KeyboardButton('Сделать заказ')
    key.add(button1,button2)
    bot.send_message(message.chat.id,'Привет, здесь ты можешь сделать заказ.',reply_markup=key)
    

@bot.message_handler(content_types='text')
def work(message):
    if message.text=='Меню':
        p1=types.InputMediaPhoto(open(r'1.png','rb'))
        p2=types.InputMediaPhoto(open(r'2.png','rb'))
        bot.send_media_group(message.chat.id,[p1,p2])
    elif message.text=='Сделать заказ':
        msg=bot.send_message(message.chat.id,'Напишите что вы выбрали(Одним сообщением через запятую)')
        bot.register_next_step_handler(msg,z)
    else:
        bot.send_message(message.chat.id,'Я вас не понял(')
def z(message):
    global z
    z=message.text
    msg=bot.send_message(message.chat.id,'Напишите адрес')
    bot.register_next_step_handler(msg,a)
def a(message):
    global a
    ikey=types.InlineKeyboardMarkup()
    button_yes=types.InlineKeyboardButton(text='Принят',callback_data='yes')
    ikey.row(button_yes)
    a=message.text
    e1='Заказ: '+z
    e2='Адрес: '+a
    e=e1+'\n'+e2
    bot.send_message(owner,e,reply_markup=ikey)
    bot.send_message(message.chat.id,'Я отправил ваш заказ.Пожалуйста, подождите.')
    global user
    user=message.chat.id
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    if call.message:
        if call.data=='yes':
            bot.send_message(user,'Принято')        

bot.polling()
  • Вопрос задан
  • 870 просмотров
Решения вопроса 1
@twistfire92
Python backend developer
Вы недавно начали изучать Python. Да и вообще программирование.
Начните с наименований переменных. Мало того, что у вас глобальные a, z, так вы еще и функции так обозвали. Читаешь и не понимаешь что хотел сказать автор.

В качестве совета по теме вопроса - При создании Inline (не Inlain) кнопки у пользователя owner, засовывайте в callback_data user_id пользователя от которого пришел заказ.
button_yes=types.InlineKeyboardButton(text='Принят',callback_data=f'yes|{message.chat.id}')

А потом
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    answer, user = call.data.split('|')
    if answer=='yes':
        bot.send_message(user,'Принято')


Уберите все global, зачем они вам???
Отформатируйте код, расставьте пустые строки между функциями, читать же невозможно
дайте функциям нормальные имена, вместо однобуквенных a z. Через какое-то время захотите подправить код и пару часов потратите на то, чтобы вспомнить что эти a z обозначают.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы