Спасибо за ссылку на fluent-discourse!
Сейчас я активно изучаю Python, поэтому вполне возможно, что существуют более эффективные подходы к решению этой задачи, чем тот, который я опишу ниже.
mention = client.notifications.json.get()
Эта команда возвращает словарь уведомлений об упоминаниях для username, который вы указали при создании client. Я предполагаю, что вы установили username в значение UserA при создании client.
Чтобы убедиться, что возвращается словарь, выполните:
print(type(mention))
Это должно вернуть <class 'dict'>.
Вы можете увидеть ключи словаря, выполнив:
print(list(mention))
Это вернет ['notifications', 'total_rows_notifications', 'seen_notification_id', 'load_more_notifications'].
В вашем случае вам нужны значения, находящиеся под ключом notifications:
notifications = mention['notifications']
Если вы затем выполните type(notifications), то увидите, что это список. Чтобы получить уведомления, сработавшие из-за упоминания UserA, нужно пройтись по списку и найти записи, где notification_type установлен в 1. Самый простой способ увидеть значения типов уведомлений Discourse — выполнить Notification.types в консоли Rails вашего сайта Discourse:
pry(main)> Notification.types
=> {:mentioned=>1,
:replied=>2,
:quoted=>3,
:edited=>4,
:liked=>5,
...
Итак, чтобы получить уведомления типа «упомянут» для пользователя, чье имя вы указали в client, попробуйте что-то вроде этого (я тестирую это в интерпретаторе Python по мере набора текста):
data = client.notifications.json.get()
notifications = data['notifications']
# Создаем пустой список для хранения уведомлений типа «упомянут»
mentions = []
# Проходим по списку `notifications`, чтобы найти все записи, где `notification_type` равен `1`
for notification in notifications:
if notification['notification_type'] == 1:
mentions.append(notification)
Это создаст список уведомлений, сработавших из-за упоминаний. Каждый элемент списка будет словарем. Вы можете проверить это, выполнив что-то вроде:
for mention in mentions:
print(mention['topic_id'], mention['post_number'])