@dp.callback_query_handler(text='application')
async def new_application(call):
conn = sqlite3.connect('reg_database.db', check_same_thread=False)
cur = conn.cursor()
cur.execute('SELECT max(id) FROM callback WHERE department="2" AND status="no"')
result = cur.fetchone()[0] # id последней записи
if result is None:
await call.message.edit_text('<b>Все заявки обработаны.</b>\nКак только появится новая заявка - '
'Вы получите соответствующие уведомление.')
else:
await call.message.edit_text('Последняя добавленная заявка: ')
for ret in cur.execute(f'SELECT * FROM callback WHERE id={result}').fetchall():
mes = await bot.send_message(call.message.chat.id, f'<b>NEW Заявка №{ret[0]}</b>\n<b>Н/Д №</b> <i>{ret[2]}</i>;\n<b>Телефон:</b> <i>{ret[3]}</i>;\n'
f'<b>Имя:</b> <i>{ret[4]}</i>;\n<b>Комментарий:</b> <i>{ret[5]}</i>.', reply_markup=InlineKeyboardMarkup().add(
InlineKeyboardButton(f'Заявка №{ret[0]} обработана', callback_data=f'processed {ret[0]}')
))
message_obj = mes.message_id
cur.execute('INSERT INTO message (application_number, message_obj) VALUES (?, ?)', (ret[0], message_obj))
conn.commit()
В коде выше функция сохраняет в базу данных id сообщения и number заявки, а далее, при обработке заявки:
@dp.callback_query_handler(lambda x: x.data and x.data.startswith('processed '))
async def application_yes(call: CallbackQuery):
await application_update(call.data.replace('processed ', ''))
cur_day = datetime.now()
cur_data = date.today()
cur_time = cur_day.time().replace(microsecond=0)
await call.message.edit_text(f'<b>Заявка №{call.data.replace("processed ", "")} обработана.</b>\nБольше Вы её не увидите.\n'
f'Дата: {cur_data};\nВремя: {cur_time}.')
conn = sqlite3.connect('reg_database.db', check_same_thread=False)
cur = conn.cursor()
for chat_id in cur.execute('SELECT * FROM users WHERE post_id = "2"').fetchall():
for message in cur.execute(f'SELECT * FROM message WHERE application_number = "{call.data.replace("processed ", "")}"').fetchall():
try:
await bot.edit_message_text(chat_id=chat_id[0], message_id=message[1], text=f'Заявка №{call.data.replace("processed ", "")} обработана.')
except:
pass
await call.answer(text=f'Заявка №{call.data.replace("processed ", "")} обработана.', show_alert=True)
с помощью вложенного цикла for перебирает все возможные комбинации и изменят текст сообщения у всех пользователей :)
Это именно то, что я и хотел видеть. Ещё раз тысячу благодарностей Вам!
Vindicar, Ваш ответ мне понравился, насчет сохранения ID сообщений в базу данных. Я думаю это то, что мне нужно. Правда говоря, эта функция не столь важна, и можно было бы просто отправлять консультантам сообщение "Заявка №Х обработана {таким-то} консультантом.\nОбновите список необработанных заявок" и крепить инлайн кнопку. Но хочется сделать красиво. Спасибо!
Борис Алексеев, да и не хотелось бы, чтобы за меня кто-то делал). Просто узнать бы есть ли в принципе такой функционал, позволяющий удалить или изменить ранее отправленное сообщение бота, идентифицировав данное сообщение по ключевым словам, в диалоге с ботом у других пользователей.
В коде выше функция сохраняет в базу данных id сообщения и number заявки, а далее, при обработке заявки:
с помощью вложенного цикла for перебирает все возможные комбинации и изменят текст сообщения у всех пользователей :)
Это именно то, что я и хотел видеть. Ещё раз тысячу благодарностей Вам!