coze-discord-proxy icon indicating copy to clipboard operation
coze-discord-proxy copied to clipboard

频道创建达到上限

Open shentong0722 opened this issue 1 year ago • 16 comments

[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}

shentong0722 avatar Feb 08 '24 13:02 shentong0722

CHANNEL_AUTO_DEL_TIME:60 [可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为0时则不删除,推荐不设置

如果频道满了,可以重新创建新的服务器,更改GUILD_ID重新将机器人拉入服务器,或手动删除原服务器中不需要的频道。

v3.1.2版本中已优化频道删除逻辑。如果没有自动删除,请提供未删除的discord频道聊天记录截图排查问题。

deanxv avatar Feb 08 '24 13:02 deanxv

CHANNEL_AUTO_DEL_TIME:60 [可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为0时则不删除,推荐不设置

如果频道满了,可以重新创建新的服务器,更改GUILD_ID重新将机器人拉入服务器,或手动删除原服务器中不需要的频道。

v3.1.2版本中已优化频道删除逻辑。如果没有自动删除,请提供未删除的discord频道聊天记录截图排查问题。

运行一段时间后的情形,有些惨不忍睹哈哈哈 image 我再次检查了配置,默认情况下确实是5秒后删除频道,至少刚刚启动服务的时候是的,我盯着discord,一个新频道在出现5秒后确实被删除了,但是一段时间后就不再删除频道了,我不知道问题出在哪里 当我重新启动render项目后恢复了正常,最初确实会自动删除频道,但是同样的运行一段时间后频道又堆满了,我不理解

shentong0722 avatar Feb 08 '24 14:02 shentong0722

顺带一提,由于Render项目10分钟不活跃就会休眠,下次唤醒要几十秒的时间,因此我写了一个脚本每隔五分钟就向他询问一个“在吗?”

shentong0722 avatar Feb 08 '24 14:02 shentong0722

不对,问题好像还要复杂,我刚刚进行了大量的实验 我发现用postman发送请求后5秒频道被自动删除,但是我用脚本发送的请求没有被删除 ???我不理解

shentong0722 avatar Feb 08 '24 14:02 shentong0722

目前使用强度是怎样的?如果5-10分钟内强度很高,确实会出现删除延迟的问题。

deanxv avatar Feb 08 '24 14:02 deanxv

日志: [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截图: image 凡是脚本发送的“在吗?”都没有被删除 反复思考之后貌似唯一的区别在于请求源的IP一个是IPv6一个是IPv4?

目前使用强度是怎样的?如果5-10分钟内强度很高,确实会出现删除延迟的问题。

就是一个用来Render保活的脚本每五分钟问一个“在吗”,其他就是我们几个人正常使用,强度并不高

shentong0722 avatar Feb 08 '24 14:02 shentong0722

项目中有每天24点的保活任务

也就是说除了你的5分钟保活任务外,其他的频道5分钟内基本都可以被正常删除是吧,确实很奇怪。

如果是这样的话可以教我如何复现吗

deanxv avatar Feb 08 '24 15:02 deanxv

哦你是为了render服务的保活吗?

deanxv avatar Feb 08 '24 15:02 deanxv

哦你是为了render服务的保活吗?

是的

shentong0722 avatar Feb 08 '24 15:02 shentong0722

render服务10分钟不活跃就会休眠

shentong0722 avatar Feb 08 '24 15:02 shentong0722

项目中有每天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任务每五分钟执行一次 image

shentong0722 avatar Feb 08 '24 15:02 shentong0722

image

shentong0722 avatar Feb 08 '24 15:02 shentong0722

render服务10分钟不活跃就会休眠

诶你这个域名不是zeabur的服务吗

deanxv avatar Feb 08 '24 15:02 deanxv

render服务10分钟不活跃就会休眠

诶你这个域名不是zeabur的服务吗

const urls = ['https://cozeproxybot.zeabur.app/v1/chat/completions', 'https://coze-proxy-9k6b.onrender.com/v1/chat/completions']; 我两个都写了,我在两边搭的,就一块写上了

shentong0722 avatar Feb 08 '24 15:02 shentong0722

因为我还另外写了一个负载均衡,哈哈哈就是折腾玩玩 就是看谁回复快就用谁

shentong0722 avatar Feb 08 '24 15:02 shentong0722

排查了半天排查到了原因,测试脚本中stream是true,但并未等待sse流式返回,但后端代码中会在请求结束后删除该请求的信号,导致在最后的删除频道逻辑中在内存找不到该请求信号,无法正常返回,从而不会走删除频道的逻辑。

所以也知道了为什么正常请求可以删除频道,测试脚本却删除不了,因为正常请求会等待sse返回结束。

刚改了一下逻辑,改为如果因为请求直接结束而在后期找不到请求时的信号时也会删除消息所在的频道。

请更新至 3.1.3版本,祝你新年快乐!

deanxv avatar Feb 08 '24 16:02 deanxv

排查了半天排查到了原因,测试脚本中stream是true,但并未等待sse流式返回,但后端代码中会在请求结束后删除该请求的信号,导致在最后的删除频道逻辑中在内存找不到该请求信号,无法正常返回,从而不会走删除频道的逻辑。

所以也知道了为什么正常请求可以删除频道,测试脚本却删除不了,因为正常请求会等待sse返回结束。

刚改了一下逻辑,改为如果因为请求直接结束而在后期找不到请求时的信号时也会删除消息所在的频道。

请更新至 3.1.3版本,祝你新年快乐!

新年快乐!作者辛苦了!

不过问题好像还是没有修复 我已经确认更新到了最新的3.2.0版本: image 然后在10.18分收到一个请求: image 然而频道并没有被删除: image

shentong0722 avatar Feb 09 '24 02:02 shentong0722

排查了半天排查到了原因,测试脚本中stream是true,但并未等待sse流式返回,但后端代码中会在请求结束后删除该请求的信号,导致在最后的删除频道逻辑中在内存找不到该请求信号,无法正常返回,从而不会走删除频道的逻辑。

所以也知道了为什么正常请求可以删除频道,测试脚本却删除不了,因为正常请求会等待sse返回结束。

刚改了一下逻辑,改为如果因为请求直接结束而在后期找不到请求时的信号时也会删除消息所在的频道。

请更新至 3.1.3版本,祝你新年快乐!

新年快乐!作者辛苦了!

不过问题好像还是没有修复

我已经确认更新到了最新的3.2.0版本:

image

然后在10.18分收到一个请求:

image

然而频道并没有被删除:

image

不是立刻删除,是会等待5分钟后删除,为了兼容多实例。

deanxv avatar Feb 09 '24 02:02 deanxv

不是立刻删除,是会等待5分钟后删除,为了兼容多实例。

是的,明白了

shentong0722 avatar Feb 09 '24 02:02 shentong0722