Беда в том, что довольно трудно найти хорошо написанный код, который можно было обозреть целиком.бесполезное занятие, больше похоже на прокрастинацию, короче пока сам не начнешь понимать какой код "красивый", какой нет (а это только когда сам напишешь кучу кода), толку от рассматривания не будет.
prerequisite: python 3.9 и winrt
import asyncio
from winrt.windows.ui.notifications.management import UserNotificationListener
from winrt.windows.ui.notifications import KnownNotificationBindings
async def notification_handler(listener, seen_notifications):
print("Слушатель уведомлений запущен. Ожидание новых уведомлений...")
# Бесконечно слушаем уведомления
while True:
try:
# Получение всех текущих уведомлений
notifications = await listener.get_notifications_async(0)
for notification in notifications:
notification_id = notification.id # Получаем уникальный ID уведомления
# Проверяем, было ли это уведомление уже обработано
if notification_id not in seen_notifications:
seen_notifications.add(notification_id) # Добавляем ID в множество обработанных уведомлений
try:
# Получение информации об уведомлении
app_name = notification.app_info.display_info.display_name
binding = notification.notification.visual.get_binding(KnownNotificationBindings.get_toast_generic())
if binding:
text_elements = binding.get_text_elements()
title = text_elements[0].text if len(text_elements) > 0 else "Без заголовка"
body = text_elements[1].text if len(text_elements) > 1 else "Без текста"
print(f"Новое уведомление!")
print(f"Приложение: {app_name}")
print(f"Заголовок: {title}")
print(f"Текст: {body}")
print("-" * 50)
# Проверяем что ув. от нужного приложения и делаем всякое нужное с ним.
except Exception as e:
print(f"Ошибка при обработке уведомления: {e}")
# Задержка перед следующим циклом
await asyncio.sleep(1)
except Exception as e:
print(f"Ошибка при получении уведомлений: {e}")
await asyncio.sleep(5) # Задержка перед повторной попыткой в случае ошибки
async def main():
# Получение текущего слушателя уведомлений
listener = UserNotificationListener.get_current()
# Смотрим есть ли разрешение на доступ к уведомлениям. Если нет, лезем в настройки уведомлений.
access_status = await listener.request_access_async()
if access_status != 1:
print("Нет разрешения на доступ к уведомлениям. Проверьте настройки конфиденциальности.")
return
seen_notifications = set() # Множество для хранения ID уже обработанных уведомлений
await notification_handler(listener, seen_notifications)
if __name__ == "__main__":
asyncio.run(main())
Удалился вопрос на этом форуме
у кого-то уже было такое?
Модераторы, ответьте
напишите пожалуйста причину
Проект спрашивает FIO
def text_handler(...): # <<< этот хендлер регистрируем
secondary_handlers = {
"О нас": about_us,
"Чем займемся?": whats_next,
"текст": handler_for_text
}
if handler := secondary_handlers.get(message.text):
handler(message)
def about_us(...): ... # < а эти нет
def whats_next(...): ...
@bot.message_handler(func=lambda message: message.text == 'О нас')
def blabla1(message):
... # тут логика реакции на сообщение "О нас"
@bot.message_handler(func=lambda message: message.text == 'Чем займёмся?')
def blabla2(message):
... # тут логика реакции на сообщение "Чем займёмся?"
@bot.message_handler(func=lambda message: True)
def whatever(message):
... # тут логика реакции на все остальные сообщения. Эта функция должна идти строго последней.