[网页插件] hu60bot: 立即与openai 对话

回复列表(118|显示机器人聊天)
  • @Ta / 2023-03-29 / /
    @老虎会游泳,不知道为什么,我感觉机器人变慢了,可能是openAI网页的问题,也有可能是论坛最近换的消息推送,还有可能是我的错觉
  • @Ta / 2023-03-29 / /

    @TabKey9,你说的哪一个?

     @hu60bot @ChatGPT @罐子2号 @靓仔 @QA @Chatbot @GPTbot 
    
  • @Ta / 2023-03-30 / /

    @TabKey9,hu60bot不慢吧

  • @Ta / 2023-03-30 / /

    @rkonfj,我们遭到了拒绝服务攻击,因为@童真再见 的连接速度过快,hu60 API迅速达到上限,返回超速页面,导致后续没有任何人可以连上。

    图片.png(263.38 KB)

  • @Ta / 2023-03-30 / /
    @rkonfj,今早hu60bot插件异常了,论坛的【提醒】已经收到,插件小老虎却没反应罢工了
  • @Ta / 2023-03-30 / /

    @TabKey9,我们遭到了 @童真再见 的拒绝服务攻击,WebSocket推送无法启动。

  • @Ta / 2023-03-30 / /
  • @Ta / 2023-03-30 / /

    hu60 API迅速达到上限,返回超速页面,导致后续没有任何人可以连上。

    @老虎会游泳,怎么判定的?我要适配一下吗?

  • @Ta / 2023-03-30 / /

    @rkonfj,达到速率上限之后,会返回这样的页面:

    ERRO[2023-03-30T09:57:46+08:00] answerHu60 get chatroom err: error, status code: 503, message: <!DOCTYPE html>
    <html>
    <head>
            <meta charset="utf-8" />
            <title>刷新不规范,虎友两行泪</title>
    </head>
    <body>
            <h4>
                    虎绿林第三区交通委提醒您:<br/>
                    网址千万条,耐心第一条。<br/>
                    刷新不规范,虎友两行泪。
            </h4>
            虎绿林低速网络限速10秒内最多访问50次(每秒5次)。<br/>
            您在20秒内访问了169次(每秒8.45次),您已超速。<br/>
            作为惩罚,吊销您的虎绿林通行证14秒钟,在这段时间内您将不能访问虎绿林。<br/>
            您的IP地址为122.9.147.96,违章记录已存档。
            请勿反复刷新,否则违章记录将延续。<br/>
    </body>
    </html> 
    

    建议的解决方案:限制单个用户的最大连接数,比如限制为最大10个连接。注意:要按sid判断连接数,不能按uid判断,因为sid转uid要查询虎绿林API。

  • @Ta / 2023-03-30 / /

    我已经暂时禁止 @童真再见 的当前sid连接WebSocket,目前机器人已上线。@TabKey9,此外这可能就是机器人越来越慢的原因。

  • @Ta / 2023-03-30 / /

    @老虎会游泳,为什么一个超速,其他用户无法连接?

  • @Ta / 2023-03-30 / /

    哦,明白了。超速限制是 php 实现的,不是 nginx ,所以hu60bot也需要实现

  • @Ta / 2023-03-30 / /

    @rkonfj,我还有一个建议,你可以在HTTP请求中添加头信息,把速率限制转移给单个用户。

    比如,把用户的真实IP填充在HTTP_CF_CONNECTING_IP里,然后我在hu60 api里添加真实IP判断。

    这个头信息的名称要可自定义,因为我不想让别人猜到来伪造IP记录。

    /**
     * 特定IP判定范围
     */
    $CC_IP_LIMIT = [
        // 设置特定IP n秒最多能访问的次数
        '127.0.0.1' => 100,
    ];
    
    /**
     * 真实IP
     */
    
    // 无代理时使用
    $CC_REAL_IP = $_SERVER['REMOTE_ADDR'];
    
    // 采用CloudFlare或百度云加速代理时使用
    #$CC_REAL_IP = $_SERVER['HTTP_CF_CONNECTING_IP'];
    
  • @Ta / 2023-03-30 / /

    @rkonfj,因为现在的超速都算在127.0.0.1头上了,所以大家都连不上。把真实IP填充在头信息里,我就可以把限速算在具体用户头上了。

  • @Ta / 2023-03-30 / /

    @老虎会游泳,我还不太理解。你现在的架构应该是 nginx 转发流量到 php-fpmhu60bot 吧?

    1. 你可以在HTTP请求中添加头信息,把速率限制转移给单个用户。

    怎么加头信息?作为服务端是读取请求头吧?如果是在 nginx 之后,反代的时候 把网络的真实 ip 放在 x-real-ip 中,hu60bot 可以拿到了不是吗?

    1. 因为现在的超速都算在127.0.0.1头上了,所以大家都连不上。把真实IP填充在头信息里,我就可以把限速算在具体用户头上了。

    你的超速不是 php 实现的吗?怎么会阻止 websocket 连接?

  • @Ta / 2023-03-30 / /

    @rkonfj,这里达到了限速,所以没有人可以认证通过。顺便一提 udSySELORQDee6_Jxv-YPMEAsAAA 已经被我设为无效了,所以公开也没关系。

    		// 获取sid(跨域时禁用cookie)
    		sid := getRequestParam(r, "sid", noCookie)
    		if sid == "" || sid == "udSySELORQDee6_Jxv-YPMEAsAAA" {
    			m.responseUnauthenticated(ws)
    			logrus.Warn("authentication failed: sid not found")
    			return
    		}
    
            // 这里达到了限速
    		res, err := m.hu60Client.GetProfile(context.Background(), sid)
    		if err != nil {
    			m.responseUnauthenticated(ws)
    			logrus.Warn("authentication failed: ", err.Error())
    			return
    		}
    
  • @Ta / 2023-03-30 / /

    @rkonfj

    你可以在HTTP请求中添加头信息,把速率限制转移给单个用户。

    图片.png(56.18 KB)

  • @Ta / 2023-03-30 / /

    @老虎会游泳,明白了。

    真实 IP 那个,可以从 nginx 传到 后端 吗?用 IP 来限速好点

  • @Ta / 2023-03-30 / /

    @rkonfj,如果http.NewRequestWithContext(ctx, http.MethodGet, c.fullURL("/user.index.json")不传递IP,nginx显然不知道用户的IP是什么。

  • @Ta / 2023-03-30 / /

    @rkonfj,所以我们需要req.Header.Set(一个自定义头信息的变量, 用户的真实IP)

添加新回复
回复需要登录