删除Slack中的消息

时间:2017-03-06 18:09:30

标签: python slack-api

Sooo,我对编程比较陌生,并试图学习如何使用API​​。我想我会开始建立一个Slack机器人用于审核目的,因为我经常使用Slack。在大多数情况下,除了我尝试删除邮件时,一切都有效。 API返回说它无法找到消息,即使它在通道中(松弛的API使用时间戳来查找所述消息)。时间戳匹配,但声明消息不存在。这是我的代码:

def __init__(self, token):
    self.token = token
    self.users = {}
    self.channels = {}
    self.slack = SlackClient(self.token)
    self.as_user = True

def connect(self):
    if self.slack.rtm_connect():
        self.post_message('#test', "*AUTOMOD* _v0.1_")

        while True:
            # print(self.slack.rtm_read())
            self.parse_data(self.slack.rtm_read())
            time.sleep(1)

def parse_data(self, payload):
    if payload:
        if payload[0]['type'] == 'message':
            print(("user: {} message: {} channel: {}").format(payload[0]['user'], payload[0]['text'], payload[0]['channel']))
            self.handle_message(payload[0])

def handle_message(self, data):
    # these users can post whatever they want.
    WHITELISTED = ["U4DU2TS2F", "U3VSRJJD8", "U3WLZUTQE", "U3W1Q2ULT"]

    # get userid
    sent_from = (data['user'])

    # ignore whitelisted
    if sent_from in WHITELISTED:
        return

    # if message was sent from someone not in WHITELISTED, delete it
    else:
        print(("\n\ntimestamp of message: {}").format(data['ts']))
        self.delete_message(data['channel'], data['ts'])
        self.post_message(data['channel'], "```" + random.choice(dongers) + "```")


def delete_message(self, channel, timestamp):
    print(("deleting message in channel '{}'...").format(channel))
    print("timestamp check (just to make sure): ", timestamp)
    deleted = self.slack.api_call("chat.delete",
                        channel=channel,
                        timestamp=timestamp,
                        as_user=self.as_user
                    )

    if deleted.get('ok'):
        print("\nsuccessfully deleted.\n")
    else:
        print(("\ncouldn't delete message: {}\n").format(deleted['error']))

输出

timestamp of message:                    1488822718.000040
deleting message in channel:             'G4DGYCW2X'
timestamp check (just to make sure...):  1488822718.000040

couldn't delete message: message_not_found

关于可能发生的事情的任何想法?以下是上下文的chat.delete方法。

编辑:

由于@ pvg建议使用“最小,完整和可验证的示例”,我已将项目中的整个代码放在gist中。

1 个答案:

答案 0 :(得分:3)

当API方法采用PasswordBox参数时,一个问题可能是您似乎将timestamp参数传递给chat.delete。 (See docs

相关问题