coze-discord-proxy
coze-discord-proxy copied to clipboard
频道创建达到上限
[ERR] 2024/02/08 - 13:40:13 | unknown | 创建频道时异常 HTTP 400 Bad Request, {"message": "Maximum number of server channels reached (500)", "code": 30013} [ERR] 2024/02/08 - 13:40:14 | 202402081340135422918704MMjHBYU | error sending message: HTTP 405 Method Not Allowed, {"message": "405: Method Not Allowed", "code": 0}
CHANNEL_AUTO_DEL_TIME:60 [可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为0时则不删除,推荐不设置
如果频道满了,可以重新创建新的服务器,更改GUILD_ID重新将机器人拉入服务器,或手动删除原服务器中不需要的频道。
v3.1.2版本中已优化频道删除逻辑。如果没有自动删除,请提供未删除的discord频道聊天记录截图排查问题。
CHANNEL_AUTO_DEL_TIME:60 [可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为0时则不删除,推荐不设置
如果频道满了,可以重新创建新的服务器,更改GUILD_ID重新将机器人拉入服务器,或手动删除原服务器中不需要的频道。
v3.1.2版本中已优化频道删除逻辑。如果没有自动删除,请提供未删除的discord频道聊天记录截图排查问题。
运行一段时间后的情形,有些惨不忍睹哈哈哈
我再次检查了配置,默认情况下确实是5秒后删除频道,至少刚刚启动服务的时候是的,我盯着discord,一个新频道在出现5秒后确实被删除了,但是一段时间后就不再删除频道了,我不知道问题出在哪里
当我重新启动render项目后恢复了正常,最初确实会自动删除频道,但是同样的运行一段时间后频道又堆满了,我不理解
顺带一提,由于Render项目10分钟不活跃就会休眠,下次唤醒要几十秒的时间,因此我写了一个脚本每隔五分钟就向他询问一个“在吗?”
不对,问题好像还要复杂,我刚刚进行了大量的实验 我发现用postman发送请求后5秒频道被自动删除,但是我用脚本发送的请求没有被删除 ???我不理解
目前使用强度是怎样的?如果5-10分钟内强度很高,确实会出现删除延迟的问题。
日志: [GIN] 2024/02/08 - 14:25:14 | 20240208142513536159319n9kHiUEQ | 200 | 600.549983ms | 2a06:98c0:3600::103 | POST /v1/chat/completions [GIN] 2024/02/08 - 14:30:15 | 2024020814301577792016PXfFOZVI | 200 | 624.389792ms | 2a06:98c0:3600::103 | POST /v1/chat/completions [GIN] 2024/02/08 - 14:35:14 | 20240208143513530944417lwXgv1Rk | 200 | 943.809862ms | 2a06:98c0:3600::103 | POST /v1/chat/completions [GIN] 2024/02/08 - 14:40:18 | 20240208144013563367299qEWhFaZl | 200 | 5.312332272s | 2a06:98c0:3600::103 | POST /v1/chat/completions [GIN] 2024/02/08 - 14:45:18 | 20240208144513517957687BwlcVpG3 | 200 | 4.898593459s | 2a06:98c0:3600::103 | POST /v1/chat/completions [GIN] 2024/02/08 - 14:45:49 | 202402081445428794246986rPD5LqX | 200 | 6.92474284s | 54.86.50.139 | POST /v1/chat/completions
Discord截图:
凡是脚本发送的“在吗?”都没有被删除
反复思考之后貌似唯一的区别在于请求源的IP一个是IPv6一个是IPv4?
目前使用强度是怎样的?如果5-10分钟内强度很高,确实会出现删除延迟的问题。
就是一个用来Render保活的脚本每五分钟问一个“在吗”,其他就是我们几个人正常使用,强度并不高
项目中有每天24点的保活任务
也就是说除了你的5分钟保活任务外,其他的频道5分钟内基本都可以被正常删除是吧,确实很奇怪。
如果是这样的话可以教我如何复现吗
哦你是为了render服务的保活吗?
哦你是为了render服务的保活吗?
是的
render服务10分钟不活跃就会休眠
项目中有每天24点的保活任务
也就是说除了你的5分钟保活任务外,其他的频道5分钟内基本都可以被正常删除是吧,确实很奇怪。
如果是这样的话可以教我如何复现吗
是的,我也很不理解 复现的话,我目前的情况是这样: workers js脚本: addEventListener('scheduled', event => { event.waitUntil(handleScheduledEvent(event)) })
async function handleScheduledEvent(event) { const urls = ['https://cozeproxybot.zeabur.app/v1/chat/completions', 'https://coze-proxy-9k6b.onrender.com/v1/chat/completions']; const body = JSON.stringify({ "messages": [ { "role": "user", "content": "在吗" } ], "stream": true, "model": "gpt-4-1106-preview" });
const headers = { 'Authorization': '123456', 'Content-Type': 'application/json' };
try {
await Promise.all(urls.map(url =>
fetch(url, { method: 'POST', headers: headers, body: body })
));
console.log('Requests sent successfully');
} catch (error) {
console.error('Error sending requests:', error);
}
}
然后通过cron任务每五分钟执行一次
render服务10分钟不活跃就会休眠
诶你这个域名不是zeabur的服务吗
render服务10分钟不活跃就会休眠
诶你这个域名不是zeabur的服务吗
const urls = ['https://cozeproxybot.zeabur.app/v1/chat/completions', 'https://coze-proxy-9k6b.onrender.com/v1/chat/completions']; 我两个都写了,我在两边搭的,就一块写上了
因为我还另外写了一个负载均衡,哈哈哈就是折腾玩玩 就是看谁回复快就用谁
排查了半天排查到了原因,测试脚本中stream是true,但并未等待sse流式返回,但后端代码中会在请求结束后删除该请求的信号,导致在最后的删除频道逻辑中在内存找不到该请求信号,无法正常返回,从而不会走删除频道的逻辑。
所以也知道了为什么正常请求可以删除频道,测试脚本却删除不了,因为正常请求会等待sse返回结束。
刚改了一下逻辑,改为如果因为请求直接结束而在后期找不到请求时的信号时也会删除消息所在的频道。
请更新至 3.1.3版本,祝你新年快乐!
排查了半天排查到了原因,测试脚本中stream是true,但并未等待sse流式返回,但后端代码中会在请求结束后删除该请求的信号,导致在最后的删除频道逻辑中在内存找不到该请求信号,无法正常返回,从而不会走删除频道的逻辑。
所以也知道了为什么正常请求可以删除频道,测试脚本却删除不了,因为正常请求会等待sse返回结束。
刚改了一下逻辑,改为如果因为请求直接结束而在后期找不到请求时的信号时也会删除消息所在的频道。
请更新至 3.1.3版本,祝你新年快乐!
新年快乐!作者辛苦了!
不过问题好像还是没有修复
我已经确认更新到了最新的3.2.0版本:
然后在10.18分收到一个请求:
然而频道并没有被删除:
排查了半天排查到了原因,测试脚本中stream是true,但并未等待sse流式返回,但后端代码中会在请求结束后删除该请求的信号,导致在最后的删除频道逻辑中在内存找不到该请求信号,无法正常返回,从而不会走删除频道的逻辑。
所以也知道了为什么正常请求可以删除频道,测试脚本却删除不了,因为正常请求会等待sse返回结束。
刚改了一下逻辑,改为如果因为请求直接结束而在后期找不到请求时的信号时也会删除消息所在的频道。
请更新至 3.1.3版本,祝你新年快乐!
新年快乐!作者辛苦了!
不过问题好像还是没有修复
我已经确认更新到了最新的3.2.0版本:
然后在10.18分收到一个请求:
然而频道并没有被删除:
不是立刻删除,是会等待5分钟后删除,为了兼容多实例。
不是立刻删除,是会等待5分钟后删除,为了兼容多实例。
是的,明白了