前言
临近过年比较闲在家庭小主机上搭了 Mattermost ,将其映射到公网上,与盆友们一起用,用用程序提供的 webhook 来做程序的消息通知提示什么的还是很不错的,但是用了一段时间发现有些提醒频道的消息太多了,想着把消息记录清理一下,自己找了一下哪里可以一键清理的,但发现只能手动一条条的清理。估计是我运气不好,在 Google 上找了下也没找到相关的插件,遂只能自己写个python 脚本来删除了,希望这个脚本可以帮到有需要的小伙伴 [aru_36]。
删除截图
实践
脚本所需的信息:Mattermost 服务器的 URL 、访问令牌(Access Token)、频道ID
-
Mattermost 服务器的 URL
就是你的 mattermost 的地址,可以是IP也可是域名 -
访问令牌(Access Token)
访问令牌默认是关闭状态,需要登录系统控制台开启,开启方法,找到“集成”然后打开里面的整合管理,划到最下面,开启个人访问令牌选项为是,开启后保存。
之后在系统控制台 > 用户管理 > 用户管理哪些用户可以创建个人访问令牌。(不建议直接用系统管理员用户,推荐用发送通知消息的用户)
点击成员 > 管理角色 然后选中 允许此账号生成个人访问令牌。
保存即可。
创建好后复制好个人令牌。
脚本使用
Python 代码
Mattermost 服务器的 URL 、访问令牌(Access Token)、频道ID
在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
相关文档
- Mattermost 官方网站: https://mattermost.com
- Mattermost API 文档: https://api.mattermost.com
- Mattermost 文档中心: https://docs.mattermost.com
- Mattermost GitHub 仓库: https://github.com/mattermost/mattermost-server
本文作者为Mr.Bai,转载请注明。