Обработка команд нескольких пользователей
Я написал программу, в которой при получения сообщения я делаю запрос в sqlite ДБ и получаю pricelist, который содержит в себе набор из товара и его цены, например pricelist = [('Banana', 3), ('Apple',), ('Orange', 2)] . Бот выводит прайслист пользователю. Если цены нету, то он дает соответствующий ответ, в зависимости от empty
@bot.message_handler(commands = ['show'])
def receiving_show(message):
pricelist = db.get_pricelist(message.from_user.id)
empty = False
for product in pricelist:
if product[1]:
empty = False
else:
empty = True
text = product[0]
if empty:
text += "'s price is TBD"
else:
text += ' costs ' + str(product[1]) + '$'
bot.send_message(message.from_user.id, text)
Если несколько людей пропишут команду, может ли быть такое, что значение переменной empty изменится из-за другого пользователя и программа будет, например, исполнять строчку text += ' costs ' + str(product[1]) + '$' даже если product[1] = None Если да, то как это избежать?
Ответы (1 шт):
Нет, не изменится. Метод будет выполняться для отдельного пользователя.
И вам бы подучить Python. Зачем ненужная переменная empty? Зачем второй if/else? Это можно поместить в одну строку:
@bot.message_handler(commands=['show'])
def receiving_show(message):
pricelist = db.get_pricelist(message.from_user.id)
for product in pricelist:
text = f"{product[0]} costs {str(product[1])} $" if product[1] else f"{product[0]}'s price is TBD"
bot.send_message(message.from_user.id, text)
UPDATE. И еще лучше выводить прайслист в одном сообщении, а не каждый товар отдельным:
@bot.message_handler(commands=['show'])
def receiving_show(message):
pricelist = db.get_pricelist(message.from_user.id)
pricelist_view = 'Pricelist:\n'
for product in pricelist:
text = f"{product[0]} costs {str(product[1])} $\n" if product[1] else f"{product[0]}'s price is TBD\n"
pricelist_view += text
bot.send_message(message.from_user.id, pricelist_view)