批量删除Mattermost频道聊天记录的脚本

Mr.Bai 1 浏览 0

前言

临近过年比较闲在家庭小主机上搭了 Mattermost ,将其映射到公网上,与盆友们一起用,用用程序提供的 webhook 来做程序的消息通知提示什么的还是很不错的,但是用了一段时间发现有些提醒频道的消息太多了,想着把消息记录清理一下,自己找了一下哪里可以一键清理的,但发现只能手动一条条的清理。估计是我运气不好,在 Google 上找了下也没找到相关的插件,遂只能自己写个python 脚本来删除了,希望这个脚本可以帮到有需要的小伙伴 [aru_36]。

删除截图

批量删除Mattermost频道聊天记录的脚本

实践

脚本所需的信息:Mattermost 服务器的 URL 、访问令牌(Access Token)、频道ID

  • Mattermost 服务器的 URL
    就是你的 mattermost 的地址,可以是IP也可是域名

  • 访问令牌(Access Token)
    访问令牌默认是关闭状态,需要登录系统控制台开启,开启方法,找到“集成”然后打开里面的整合管理,划到最下面,开启个人访问令牌选项为是,开启后保存。
    批量删除Mattermost频道聊天记录的脚本

之后在系统控制台 > 用户管理 > 用户管理哪些用户可以创建个人访问令牌。(不建议直接用系统管理员用户,推荐用发送通知消息的用户)

批量删除Mattermost频道聊天记录的脚本

点击成员 > 管理角色 然后选中 允许此账号生成个人访问令牌。
批量删除Mattermost频道聊天记录的脚本
保存即可。

然后在个人资料中选择“安全” 然后创建个人访问令牌。
批量删除Mattermost频道聊天记录的脚本
批量删除Mattermost频道聊天记录的脚本
批量删除Mattermost频道聊天记录的脚本

批量删除Mattermost频道聊天记录的脚本

创建好后复制好个人令牌。

  • 频道ID
    要删除聊天记录频道的ID
    进入频道聊天页面,点击左上角频道名称那里即可展开相关设置,在选择频道详情,右侧即可看到频道ID。
    批量删除Mattermost频道聊天记录的脚本
    批量删除Mattermost频道聊天记录的脚本

脚本使用

Python 代码

Mattermost 服务器的 URL 、访问令牌(Access Token)、频道ID

批量删除Mattermost频道聊天记录的脚本

在python3 环境下运行,需要安装 requests

pip3 install requests

把以下脚本保持下来直接用 python your-python-file.py 运行即可。

脚本一 (推荐)

import requests

# 配置
base_url = "http://10.10.11.143:8065"
access_token = "e8gasjrsnzfop67gwe"
channel_id = "rfdpkzobogm6fpwfn3c"

headers = {
    "Authorization": f"Bearer {access_token}"
}

# 获取频道消息
def get_channel_posts(channel_id):
    url = f"{base_url}/api/v4/channels/{channel_id}/posts"
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()["order"]
    else:
        print(f"Failed to fetch posts: {response.status_code}")
        return []

# 删除消息
def delete_post(post_id):
    url = f"{base_url}/api/v4/posts/{post_id}"
    response = requests.delete(url, headers=headers)
    if response.status_code == 200:
        print(f"Deleted post {post_id}")
    else:
        print(f"Failed to delete post {post_id}: {response.status_code}")

# 主程序
post_ids = get_channel_posts(channel_id)
for post_id in post_ids:
    delete_post(post_id)

脚本二

import requests

#### 配置参数
# mattermost 地址
mattermost_url = 'http://10.10.11.143:8065'
# 需要删除频道id
channel_id = 'rfdpkzobogm6fpwfn3c'
# 个人令牌
access_token = 'e8gasjrsgwnzfop67gwe'

headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json'
}

def delete_post(post_id):
    response = requests.delete(f'{mattermost_url}/api/v4/posts/{post_id}', headers=headers)
    if response.status_code == 200:
        print(f'成功删除消息: {post_id}')
    else:
        print(f'删除消息失败: {post_id}, 状态码: {response.status_code}')

def main():
    # 获取频道中的所有消息
    response = requests.get(f'{mattermost_url}/api/v4/channels/{channel_id}/posts', headers=headers)

    if response.status_code != 200:
        print(f'获取消息失败, 状态码: {response.status_code}')
        print(response.json())  # 打印详细错误信息
        return

    posts = response.json().get('posts', {})

    for post_id in posts:
        delete_post(post_id)

if __name__ == '__main__':
    main()

shell 脚本 (无python环境下使用)

这个脚本使用了 jq 工具来解析 JSON 响应。所有如果没有 jq 的话需要安装一下。

#!/bin/bash

# 配置
base_url="http://10.10.11.143:8065"
access_token="e8gasnzfop67gwe"
channel_id="rfdpkzgm6fpwfn3c"

# 获取频道消息
get_channel_posts() {
    url="$base_url/api/v4/channels/$channel_id/posts"
    response=$(curl -s -H "Authorization: Bearer $access_token" "$url")
    echo "$response" | jq -r '.order[]'
}

# 删除消息
delete_post() {
    post_id="$1"
    url="$base_url/api/v4/posts/$post_id"
    response=$(curl -s -X DELETE -H "Authorization: Bearer $access_token" "$url")
    if [ $? -eq 0 ]; then
        echo "Deleted post $post_id"
    else
        echo "Failed to delete post $post_id"
    fi
}

# 主程序
post_ids=$(get_channel_posts)
for post_id in $post_ids; do
    delete_post "$post_id"
done

相关文档

  1. Mattermost 官方网站: https://mattermost.com
  2. Mattermost API 文档: https://api.mattermost.com
  3. Mattermost 文档中心: https://docs.mattermost.com
  4. Mattermost GitHub 仓库: https://github.com/mattermost/mattermost-server

发表评论 取消回复
表情 图片 链接 代码

分享
请选择语言