2016-08-15 2 views
0

Я пытаюсь напечатать канал, сообщение было отправлено в slack с помощью python SlackClient. После запуска этого кода я получаю только идентификатор, а не название канала.Найти имя канала сообщения с помощью SlackClient

import time 
import os 
from slackclient import SlackClient 

BOT_TOKEN = os.environ.get('SLACK_BOT_TOKEN') 

def main(): 
    # Creates a slackclient instance with bots token 
    sc = SlackClient(BOT_TOKEN) 

    #Connect to slack 
    if sc.rtm_connect(): 
     print "connected" 
     while True: 
      # Read latest messages 
      for slack_message in sc.rtm_read(): 
       message = slack_message.get("text") 
       print message 
       channel = slack_message.get("channel") 
       print channels 
      time.sleep(1) 


if __name__ == '__main__': 
    main() 

Это выход:

test 
U1K78788H 
+1

Возможно это? https://api.slack.com/methods/channels.info Или, может быть, позвоните в этот раз и сохраните результаты в 'dict'? https://api.slack.com/methods/channels.list –

ответ

0

Я не уверен, что вы вывода. Не следует ли «каналам» быть «канал»? Кроме того, я думаю, что этот вывод является полем «пользователь». Поле «Канал» должно содержать идентификатор, начинающийся с C или G (doc).

{ 
    "type": "message", 
    "channel": "C2147483705", 
    "user": "U2147483697", 
    "text": "Hello world", 
    "ts": "1355517523.000005" 
} 

Затем используйте либо клиент питона, чтобы получить имя канала, если он хранит его (я не знаю, клиент Python), или использовать метод веб-API channels.info, чтобы получить имя канала.

1

Это всегда будет идентификатор канала, а не название канала. Вы должны позвонить channels.info, чтобы получить название канала.

import time 
import os 
from slackclient import SlackClient 

BOT_TOKEN = os.environ.get('SLACK_BOT_TOKEN') 

def main(): 
# Creates a slackclient instance with bots token 
sc = SlackClient(BOT_TOKEN) 

#Connect to slack 
if sc.rtm_connect(): 
    print "connected" 
    while True: 
     # Read latest messages 
     for slack_message in sc.rtm_read(): 
      message = slack_message.get("text") 
      print message 
      channel = slack_message.get("channel") 
      print channel 
      channel_info=sc.api_call("channels.info",channel=channel) 
      print channel_info["channel"]["name"] 
     time.sleep(1) 


if __name__ == '__main__': 
    main() 

Это также напечатает название канала. Другим способом является то, что вы можете хранить имена всех каналов с помощью channel_id в словаре заранее. А затем введите имя канала с ключом id.

Смежные вопросы