Python > Получить содержимое поста, если упомянут

Спасибо за ссылку на 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'])