Как вернуть слабых пользователей и их статус? - PullRequest
0 голосов
/ 06 ноября 2019

Я использую два слабых API, users.list () и users.getPresence (). Я использую users.list () для получения имен и идентификаторов пользователя.

API users.getPresence () принимает идентификатор пользователя в качестве параметра и выводит только свое присутствие «активный» или «отсутствующий», как показано здесь: https://api.slack.com/methods/users.getPresence

Я пыталсявзяв имена, которые я извлек из users_list (), и вернув их вместе с API users_getPresence (), но затем я получил список имен, повторяющихся для каждого статуса.

client = slack.WebClient(API_KEY)
def users_list():
    users_call = client.users_list()
    users = users_call['members']
    result = []
    # loops for each user
    for user in users:
        uid = user['id'] 
        name = user['profile']['real_name']
        info = {"id": None, "name": None}
        if users_call['ok']:  
            info['id'] = uid
            info['name'] = name
            result.append(info) 
        else:
            return None
    return result

def users_getPresence():
    info = users_list()
    users = []
    for value in info:
        uid = value['id']
        users.append(uid)
    presence = []
    for user in users:
        presence_call = client.users_getPresence(user = user)
        if presence_call['ok']:
            presence.append(presence_call['presence'])
        else:
            return None
    return presence

В настоящее время два API имеют отдельные выходы, где users.list () возвращает идентификатор и имя, а users.getPresence () возвращает присутствие.

Как я могу вернуть имя пользователя и его статус вместе?

1 Ответ

0 голосов
/ 07 ноября 2019

Вот обновленная версия вашей второй функции, которая возвращает список всех пользователей с их статусом присутствия. Обратите внимание, что я также добавил режим сна, чтобы вы не нарушали ограничение скорости до 50 вызовов в минуту.

def users_getPresence():            
    users = users_list()
    for user in users:
        presence_call = client.users_getPresence(user = user['id'])
        sleep(1.2)
        if presence_call['ok']:
            user['presence'] = presence_call['presence']
        else:
            user['presence'] = None
    return users

Я также видел несколько проблем с вашей первой функцией. В основном проверка на ok в цикле не работает, потому что если метод завершится неудачей, он не будет содержать пользователей, и ваш скрипт завершится с ошибкой, прежде чем он достигнет проверки ok.

...