【问题标题】:Deleting Messages in Slack在 Slack 中删除消息
【发布时间】:2017-03-07 03:02:14
【问题描述】:

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 中。

【问题讨论】:

  • 你应该试着把它写成minimal reproducible example。例如,当您的 handle_message 方法被调用时,该消息已发布,但它被调用时,这并不是很清楚。
  • @pvg 哇,好文档。您认为将其全部发布在一个要点中会更好吗?
  • 不,这是“最小”的意思。此外,代码实际上必须在您的问题中。所以最佳问题有一个独立的代码 sn-p 显示您遇到的问题,其他人可以尝试。并非总是可能,但在这种情况下可能是。另一个积极的副作用:编写其中一个通常可以让您自己找出问题。
  • @pvg 我明白你在说什么,但我在原始问题中发布的代码是罪魁祸首和最少的代码(它实际上是我的机器人中唯一没有工作)。无论如何,我已经为您的链接添加了书签,因为它似乎是一个很好的资源!
  • 它不是独立的。例如,无法从您问题中的代码中看出您实际上是如何接收消息的。

标签: python slack-api


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2016-10-21
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多