×

使用 coze-discord-proxy 后删除多余的对话

Falcon 2024-03-09 views:
摘要

正在生成中……

用了这个项目部署了两个机器人,

简单来说,它就是代理Discord对话Coze-Bot,实现以API形式请求GPT4模型。

好像是免费,坏处是时不时会被Coze反制,如果哪天出问题就得看看作者有没有更新代码和镜像,还有就是响应比较慢,毕竟经过了几层转发。

但我今天遇到的问题是被Discord限制了,哈哈,就是项目中有一个 环境变量。

CHANNEL_AUTO_DEL_TIME=5 [可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为0时则不删除,推荐不使用此环境变量

作者的初衷是每次对话新开一个频道作为对话隔离,为了防止太多对话设置自动删除时间,我设置成0,也就是永不删除,因为我想一直作为记录保存在discord(也可以,不过不是这样设置的,见后文),但是没想到discord也有限制,就是频道最多能开好像三四百个吧,今天使用时发现不能翻译了,一看discord对话已经几百条了,红晃晃的未读消息数,再看 docker logs 显示创建新的discord频道失败,看来达到了创建频道数的最大值。

但是这三四百个对话,手动一个个删除十分麻烦,况且还有一个确定的界面,就用chatgpt4写了点js代码,在前端执行。如果一次没删除完,再把对话分组的滚动条下拉,再执行一次。 吐槽一下:discord禁止了浏览器使用F12或者右键打开的方式,请从浏览器菜单的 视图>开发者>开发者工具 打开。



function performAction(dialogId){
  //自己抓包删除一个对话的请求,导出来fetch,下面的省略很多
  fetch(`https://discord.com/api/v9/channels/${dialogId}`, {
  "headers": {
    "accept": "*/*",
    "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
    "authorization": "你的authorization",
    "cache-control": "no-cache",
    "pragma": "no-cache",
    "sec-ch-ua": "\"Not A(Brand\";v=\"99\", \"Google Chrome\";v=\"121\", \"Chromium\";v=\"121\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"macOS\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-debug-options": "bugReporterEnabled",
    "x-discord-locale": "zh-CN",
    "x-discord-timezone": "Asia/Shanghai",
    "x-super-properties": "自己抓包找"
  },
  "referrer": "https://discord.com/channels/1194920210818416700/1217403174495850587",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": null,
  "method": "DELETE",
  "mode": "cors",
  "credentials": "include"
});
}

const channelId = '你的频道id' //也就是项目中的 GUILD_ID

const allLinks = document.querySelectorAll('a');
// 定义筛选条件
const prefix = `/channels/${channelId}/`; 
const keyword = 'cdp-';
// 过滤并处理所有符合条件的 a 标签的 href
const filteredHrefs = Array.from(allLinks)
  .filter(link => link.getAttribute('href')?.startsWith(prefix) && link.getAttribute('aria-label')?.includes(keyword))
  .map(link => link.getAttribute('href').slice(prefix.length)); // slice 从前缀后开始截取
filteredHrefs.forEach(performAction)

PS, 附保留对话在特定频道的环境变量设置,其实也很简单,设置如下:

      - DEFAULT_CHANNEL_ENABLE=1
      - CHANNEL_AUTO_DEL_TIME=0
本文收录于