From d8e4968044a3b684e2c33a25c8f3fac9f5c57ca9 Mon Sep 17 00:00:00 2001 From: zhouwentao <1577701412@qq.com> Date: Tue, 11 Jun 2024 15:30:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E6=B1=82API=E7=9A=84=E7=B1=BB?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=96=B9=E6=B3=95=20tech.ordinaryroad.live.c?= =?UTF-8?q?hat.client.commons.util.AiChatUtil.class=20a-bogus.js=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=94=B9=E4=B8=BA=E4=BB=8E=E9=A1=B9=E7=9B=AE=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B8=8Bresources=E7=9B=AE=E5=BD=95=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=20tech.ordinaryroad.live.chat.client.douyin.clientDouyinLiveCh?= =?UTF-8?q?atClientTest.class=20=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../live-chat-client-codec-douyin/pom.xml | 4 ++ .../client/codec/douyin/api/DouyinApis.java | 3 +- .../chat/client/commons/util/AiChatUtil.java | 69 +++++++++++++++++++ .../live-chat-client-douyin/pom.xml | 6 ++ .../client/DouyinLiveChatClientTest.java | 62 +++++++++++++---- 5 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/AiChatUtil.java diff --git a/live-chat-client-codec/live-chat-client-codec-douyin/pom.xml b/live-chat-client-codec/live-chat-client-codec-douyin/pom.xml index fee2282..ccf13e8 100644 --- a/live-chat-client-codec/live-chat-client-codec-douyin/pom.xml +++ b/live-chat-client-codec/live-chat-client-codec-douyin/pom.xml @@ -94,5 +94,9 @@ 4.5.1 models + + com.google.protobuf + protobuf-java + diff --git a/live-chat-client-codec/live-chat-client-codec-douyin/src/main/java/tech/ordinaryroad/live/chat/client/codec/douyin/api/DouyinApis.java b/live-chat-client-codec/live-chat-client-codec-douyin/src/main/java/tech/ordinaryroad/live/chat/client/codec/douyin/api/DouyinApis.java index d6e99dc..388518d 100644 --- a/live-chat-client-codec/live-chat-client-codec-douyin/src/main/java/tech/ordinaryroad/live/chat/client/codec/douyin/api/DouyinApis.java +++ b/live-chat-client-codec/live-chat-client-codec-douyin/src/main/java/tech/ordinaryroad/live/chat/client/codec/douyin/api/DouyinApis.java @@ -235,7 +235,8 @@ public class DouyinApis { String a_bogus=""; Context context = Context.newBuilder("js").allowAllAccess(true).build(); try { - File jsFile = new File("D:\\workspace\\ordinaryroad-live-chat-client\\live-chat-client-codec\\live-chat-client-codec-douyin\\src\\main\\resources\\a-bogus.js"); + String bogus_path = DouyinApis.class.getClassLoader().getResource("a-bogus.js").getPath(); + File jsFile = new File(bogus_path); String jsCode = new String(Files.readAllBytes(jsFile.toPath())); Source source = Source.newBuilder("js", jsCode, "a-bogus1.js").build(); context.eval(source); diff --git a/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/AiChatUtil.java b/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/AiChatUtil.java new file mode 100644 index 0000000..8a35be4 --- /dev/null +++ b/live-chat-client-commons/live-chat-client-commons-util/src/main/java/tech/ordinaryroad/live/chat/client/commons/util/AiChatUtil.java @@ -0,0 +1,69 @@ +package tech.ordinaryroad.live.chat.client.commons.util; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.http.*; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; + +import java.util.HashMap; + +/** + * fast AI 调用工具 + * @author ZhouWenTao + * @create 2024-06-11-12:11 + */ + +public class AiChatUtil { + // 问答api地址 + private static final String CHAT_COMPLETIONS_URL = "http://ai.izcsz.com/api/v1/chat/completions"; + // 请求token + private static final String authorization = "Bearer fastgpt-MBOxnysyhuzMMuLijtq1qYQa6dwIo6AsB0lR5L2r5ommMhBrRd0g9OKNwx4E6"; + //请求API时固定的Header + private static final HashMap headerMap = new HashMap<>(); + + static { + // 固定请求TOKEN + headerMap.put("Authorization", authorization); + } + /** + * 调用 问答API接口 + * @param content + */ + public static String chatCompletions(String content) { + String contentType = "application/json"; + String data = "{\"chatId\":\"abcd\",\"stream\":false,\"detail\":false,\"variables\":{\"nick\":\"亮亮\"},\"messages\":[{\"content\":\""+content+"\",\"role\":\"user\"}]}"; + return HttpRequest.post(CHAT_COMPLETIONS_URL) + .addHeaders(headerMap) + .header("Content-Type", contentType) + .body(data) //接收String类型数据 + .timeout(60000) + .execute() + .body(); + } + + /** + * 转换问答api返回数据中格式化出message文本 + * @param completionsJsonStr + * @return + */ + public static String formatCompletionOutContent(String completionsJsonStr){ + try { + if (null !=completionsJsonStr && !completionsJsonStr.isEmpty()) { + JSONObject responseBody = new JSONObject(completionsJsonStr); + JSONArray choices = responseBody.getJSONArray("choices");// 获取ai返回的内容,这里获取第一条 + if (!CollectionUtil.isEmpty(choices)) { + JSONObject choicesItem = choices.getJSONObject(0); + return choicesItem.getJSONObject("message").getStr("content"); + } + } + }catch (Exception e){ + System.out.println("ERROR-转换问答接口message时出错:"+e.getMessage()); + } + return null; + } + + + public static void main(String[] args) { + System.out.println(formatCompletionOutContent(chatCompletions("用java写一个冒泡排序"))); + } +} diff --git a/live-chat-clients/live-chat-client-douyin/pom.xml b/live-chat-clients/live-chat-client-douyin/pom.xml index b3fe074..dd2faf7 100644 --- a/live-chat-clients/live-chat-client-douyin/pom.xml +++ b/live-chat-clients/live-chat-client-douyin/pom.xml @@ -32,5 +32,11 @@ ${junit-jupiter.version} test + + junit + junit + RELEASE + test + diff --git a/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClientTest.java b/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClientTest.java index 7ddac04..0df3c01 100644 --- a/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClientTest.java +++ b/live-chat-clients/live-chat-client-douyin/src/test/java/tech/ordinaryroad/live/chat/client/douyin/client/DouyinLiveChatClientTest.java @@ -1,13 +1,12 @@ package tech.ordinaryroad.live.chat.client.douyin.client; -import cn.hutool.core.thread.ThreadUtil; import cn.hutool.json.JSONObject; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.UnknownFieldSet; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.Test; -import org.junit.platform.commons.util.StringUtils; import tech.ordinaryroad.live.chat.client.codec.douyin.constant.DouyinCmdEnum; import tech.ordinaryroad.live.chat.client.codec.douyin.msg.*; import tech.ordinaryroad.live.chat.client.codec.douyin.protobuf.DouyinCmdMsgOuterClass; @@ -15,11 +14,13 @@ import tech.ordinaryroad.live.chat.client.codec.douyin.protobuf.DouyinWebcastGif import tech.ordinaryroad.live.chat.client.codec.douyin.protobuf.DouyinWebcastSocialMessageMsgOuterClass; import tech.ordinaryroad.live.chat.client.commons.base.msg.ICmdMsg; import tech.ordinaryroad.live.chat.client.commons.base.msg.IMsg; -import tech.ordinaryroad.live.chat.client.commons.client.enums.ClientStatusEnums; +import tech.ordinaryroad.live.chat.client.commons.util.AiChatUtil; import tech.ordinaryroad.live.chat.client.douyin.config.DouyinLiveChatClientConfig; import tech.ordinaryroad.live.chat.client.douyin.listener.IDouyinMsgListener; import tech.ordinaryroad.live.chat.client.douyin.netty.handler.DouyinBinaryFrameHandler; +import java.util.ArrayList; +import java.util.List; import java.util.Map; /** @@ -31,29 +32,41 @@ class DouyinLiveChatClientTest { static Object lock = new Object(); DouyinLiveChatClient client; + static List shieldUserIdList = new ArrayList<>();//屏蔽回复用户id + static List shieldNickNameList = new ArrayList<>();//屏蔽回复用户昵称 + + static { + ///根据用户id或昵称屏蔽回复 + //屏蔽用户id + shieldUserIdList.add("3844369757514799"); + //屏幕用户名 + shieldNickNameList.add("李李李林"); + } @Test void example() throws InterruptedException { // String cookie = System.getenv("cookie"); - String cookie ="ttwid=1%7CU6YHr6wKj_WHHXYfelzk5jc7uAg-yN0k2k4yTm1Uo-s%7C1704965821%7Cf48a7874351c69357f4f5f531416c9ad43385f9059fe7c57a5bbb9732b5f5add; store-region-src=uid; live_use_vvc=%22false%22; xgplayer_user_id=657157399276; passport_csrf_token=8be74ec699ab18095dca4f5702e616f9; passport_csrf_token_default=8be74ec699ab18095dca4f5702e616f9; bd_ticket_guard_client_web_domain=2; _bd_ticket_crypt_doamin=2; __security_server_data_status=1; my_rd=2; publish_badge_show_info=%220%2C0%2C0%2C1715773185377%22; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%2C%22isForcePopClose%22%3A1%7D; SEARCH_RESULT_LIST_TYPE=%22single%22; LOGIN_STATUS=1; store-region=cn-sx; __live_version__=%221.1.2.250%22; FOLLOW_RED_POINT_INFO=%221%22; volume_info=%7B%22isUserMute%22%3Atrue%2C%22isMute%22%3Atrue%2C%22volume%22%3A0.056%7D; download_guide=%223%2F20240521%2F0%22; strategyABtestKey=%221716342956.58%22; csrf_session_id=c0e8a5e872a6f46fc9f680d648d0506c; has_avx2=null; device_web_cpu_core=12; device_web_memory_size=8; webcast_leading_last_show_time=1716342967261; webcast_leading_total_show_times=1; webcast_local_quality=ld; pwa2=%220%7C0%7C3%7C1%22; passport_assist_user=Cjy-XOyHP7UxqDjMY8EgqDg7y2ZTQwU-2n9VwZmWY7NOzNfIE7h_mGo82Qvin4tjMegXNQANqLuGpjIPSjwaSgo8UMXwBgvpWS-UfZRncpUt1NP79vbsJy0575r3PH_q0PCdKEODEZIUEYLsFsltD9oMKEm6uBgmi8CgQ2P3EP_60Q0Yia_WVCABIgEDzHu1Lw%3D%3D; n_mh=Bj7_B8aFG8fIBbINj1-kLTnQ9S9DDEx44d6T3t5Xhl8; sso_uid_tt=4e9a67ef7a1f34439805b9545a64c499; sso_uid_tt_ss=4e9a67ef7a1f34439805b9545a64c499; toutiao_sso_user=82307b656b07f2e1a4cf91e5d8da0006; toutiao_sso_user_ss=82307b656b07f2e1a4cf91e5d8da0006; sid_ucp_sso_v1=1.0.0-KDc3NzM2ZTJjZjVmNTUxNmIxOGQ2YTcwYzQzYzU4ZDY3ODE5MTdlNWQKHQjNzOCXhAIQx9e2sgYY7zEgDDCKwIzOBTgGQPQHGgJscSIgODIzMDdiNjU2YjA3ZjJlMWE0Y2Y5MWU1ZDhkYTAwMDY; ssid_ucp_sso_v1=1.0.0-KDc3NzM2ZTJjZjVmNTUxNmIxOGQ2YTcwYzQzYzU4ZDY3ODE5MTdlNWQKHQjNzOCXhAIQx9e2sgYY7zEgDDCKwIzOBTgGQPQHGgJscSIgODIzMDdiNjU2YjA3ZjJlMWE0Y2Y5MWU1ZDhkYTAwMDY; passport_auth_status=eb9c3dbcb1c9737616664cadf1d8a790%2Cfba0b2a35313b10a9e2e6c5d8f4d0f5f; passport_auth_status_ss=eb9c3dbcb1c9737616664cadf1d8a790%2Cfba0b2a35313b10a9e2e6c5d8f4d0f5f; uid_tt=4c60bce2af32bb3fc83bce53bdd3e567; uid_tt_ss=4c60bce2af32bb3fc83bce53bdd3e567; sid_tt=a9af6fcd917a75ddd5d8bdb6d8c44496; sessionid=a9af6fcd917a75ddd5d8bdb6d8c44496; sessionid_ss=a9af6fcd917a75ddd5d8bdb6d8c44496; _bd_ticket_crypt_cookie=b745f8fd1c572267484fbfe58b89c925; sid_guard=a9af6fcd917a75ddd5d8bdb6d8c44496%7C1716366286%7C5183996%7CSun%2C+21-Jul-2024+08%3A24%3A42+GMT; sid_ucp_v1=1.0.0-KDFmMzRhNjk3NDg4OGMyNGQxZTk3ZmNhZjcwNmYzN2JlZDNkMjJkNmYKGQjNzOCXhAIQzte2sgYY7zEgDDgGQPQHSAQaAmhsIiBhOWFmNmZjZDkxN2E3NWRkZDVkOGJkYjZkOGM0NDQ5Ng; ssid_ucp_v1=1.0.0-KDFmMzRhNjk3NDg4OGMyNGQxZTk3ZmNhZjcwNmYzN2JlZDNkMjJkNmYKGQjNzOCXhAIQzte2sgYY7zEgDDgGQPQHSAQaAmhsIiBhOWFmNmZjZDkxN2E3NWRkZDVkOGJkYjZkOGM0NDQ5Ng; __ac_signature=_02B4Z6wo00f01GnsMRQAAIDBY8rqvlBzsRhpzDWAAHw-eb; FOLLOW_LIVE_POINT_INFO=%22MS4wLjABAAAAfAS7FbtmU-rQ7alBP_D6bJBIWX27xHGXI0bVcHoisis%2F1716393600000%2F0%2F0%2F1716370567576%22; stream_player_status_params=%22%7B%5C%22is_auto_play%5C%22%3A0%2C%5C%22is_full_screen%5C%22%3A0%2C%5C%22is_full_webscreen%5C%22%3A0%2C%5C%22is_mute%5C%22%3A1%2C%5C%22is_speed%5C%22%3A1%2C%5C%22is_visible%5C%22%3A1%7D%22; WallpaperGuide=%7B%22showTime%22%3A1716188223721%2C%22closeTime%22%3A0%2C%22showCount%22%3A2%2C%22cursor1%22%3A87%2C%22cursor2%22%3A0%2C%22hoverTime%22%3A1716352032390%7D; __ac_nonce=0664dbd4e00c752141901; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1920%2C%5C%22screen_height%5C%22%3A1080%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A12%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A10%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A150%7D%22; FOLLOW_NUMBER_YELLOW_POINT_INFO=%22MS4wLjABAAAAfAS7FbtmU-rQ7alBP_D6bJBIWX27xHGXI0bVcHoisis%2F1716393600000%2F1716369970156%2F0%2F1716372013022%22; FRIEND_NUMBER_RED_POINT_INFO=%22MS4wLjABAAAAfAS7FbtmU-rQ7alBP_D6bJBIWX27xHGXI0bVcHoisis%2F1716393600000%2F1716370815219%2F0%2F0%22; passport_fe_beating_status=true; home_can_add_dy_2_desktop=%221%22; xg_device_score=7.740503633714868; live_can_add_dy_2_desktop=%221%22; IsDouyinActive=true; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCR1NCbXBuQWhMRFg3TERDUVZqZnRDSHJXa1FTNzZNR1ZPcDI4YXB1WmhTd3B0YnArM1NKRCt1b2lZTFFacENDS2JaMEZkaFZUcEtyei9sU0ZzNTlWNUk9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoxfQ%3D%3D; odin_tt=5cb1890563132950efc6a30651b7131a6421e8423d05672245eecc5f5c052cd9122f6a6314b1a40c1ac0bb1eeb70a9df50bcfee6bde0eee4a5e5dbc2b6516455; msToken=0x6ze9kt9qdjqmsf_mqiXzhZKT4cP3vD1AxZuFg6AQJy6LhFHm5R_Fzq_KtFkuAX9iDg2OJypnqfKSuv95TG7T1oGzcaHkGXLJLG7WAqAg2rQdM9DXA="; + //String cookie ="ttwid=1%7CU6YHr6wKj_WHHXYfelzk5jc7uAg-yN0k2k4yTm1Uo-s%7C1704965821%7Cf48a7874351c69357f4f5f531416c9ad43385f9059fe7c57a5bbb9732b5f5add; store-region-src=uid; live_use_vvc=%22false%22; xgplayer_user_id=657157399276; passport_csrf_token=8be74ec699ab18095dca4f5702e616f9; passport_csrf_token_default=8be74ec699ab18095dca4f5702e616f9; bd_ticket_guard_client_web_domain=2; _bd_ticket_crypt_doamin=2; __security_server_data_status=1; my_rd=2; publish_badge_show_info=%220%2C0%2C0%2C1715773185377%22; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%2C%22isForcePopClose%22%3A1%7D; SEARCH_RESULT_LIST_TYPE=%22single%22; LOGIN_STATUS=1; store-region=cn-sx; __live_version__=%221.1.2.250%22; FOLLOW_RED_POINT_INFO=%221%22; volume_info=%7B%22isUserMute%22%3Atrue%2C%22isMute%22%3Atrue%2C%22volume%22%3A0.056%7D; download_guide=%223%2F20240521%2F0%22; strategyABtestKey=%221716342956.58%22; csrf_session_id=c0e8a5e872a6f46fc9f680d648d0506c; has_avx2=null; device_web_cpu_core=12; device_web_memory_size=8; webcast_leading_last_show_time=1716342967261; webcast_leading_total_show_times=1; webcast_local_quality=ld; pwa2=%220%7C0%7C3%7C1%22; passport_assist_user=Cjy-XOyHP7UxqDjMY8EgqDg7y2ZTQwU-2n9VwZmWY7NOzNfIE7h_mGo82Qvin4tjMegXNQANqLuGpjIPSjwaSgo8UMXwBgvpWS-UfZRncpUt1NP79vbsJy0575r3PH_q0PCdKEODEZIUEYLsFsltD9oMKEm6uBgmi8CgQ2P3EP_60Q0Yia_WVCABIgEDzHu1Lw%3D%3D; n_mh=Bj7_B8aFG8fIBbINj1-kLTnQ9S9DDEx44d6T3t5Xhl8; sso_uid_tt=4e9a67ef7a1f34439805b9545a64c499; sso_uid_tt_ss=4e9a67ef7a1f34439805b9545a64c499; toutiao_sso_user=82307b656b07f2e1a4cf91e5d8da0006; toutiao_sso_user_ss=82307b656b07f2e1a4cf91e5d8da0006; sid_ucp_sso_v1=1.0.0-KDc3NzM2ZTJjZjVmNTUxNmIxOGQ2YTcwYzQzYzU4ZDY3ODE5MTdlNWQKHQjNzOCXhAIQx9e2sgYY7zEgDDCKwIzOBTgGQPQHGgJscSIgODIzMDdiNjU2YjA3ZjJlMWE0Y2Y5MWU1ZDhkYTAwMDY; ssid_ucp_sso_v1=1.0.0-KDc3NzM2ZTJjZjVmNTUxNmIxOGQ2YTcwYzQzYzU4ZDY3ODE5MTdlNWQKHQjNzOCXhAIQx9e2sgYY7zEgDDCKwIzOBTgGQPQHGgJscSIgODIzMDdiNjU2YjA3ZjJlMWE0Y2Y5MWU1ZDhkYTAwMDY; passport_auth_status=eb9c3dbcb1c9737616664cadf1d8a790%2Cfba0b2a35313b10a9e2e6c5d8f4d0f5f; passport_auth_status_ss=eb9c3dbcb1c9737616664cadf1d8a790%2Cfba0b2a35313b10a9e2e6c5d8f4d0f5f; uid_tt=4c60bce2af32bb3fc83bce53bdd3e567; uid_tt_ss=4c60bce2af32bb3fc83bce53bdd3e567; sid_tt=a9af6fcd917a75ddd5d8bdb6d8c44496; sessionid=a9af6fcd917a75ddd5d8bdb6d8c44496; sessionid_ss=a9af6fcd917a75ddd5d8bdb6d8c44496; _bd_ticket_crypt_cookie=b745f8fd1c572267484fbfe58b89c925; sid_guard=a9af6fcd917a75ddd5d8bdb6d8c44496%7C1716366286%7C5183996%7CSun%2C+21-Jul-2024+08%3A24%3A42+GMT; sid_ucp_v1=1.0.0-KDFmMzRhNjk3NDg4OGMyNGQxZTk3ZmNhZjcwNmYzN2JlZDNkMjJkNmYKGQjNzOCXhAIQzte2sgYY7zEgDDgGQPQHSAQaAmhsIiBhOWFmNmZjZDkxN2E3NWRkZDVkOGJkYjZkOGM0NDQ5Ng; ssid_ucp_v1=1.0.0-KDFmMzRhNjk3NDg4OGMyNGQxZTk3ZmNhZjcwNmYzN2JlZDNkMjJkNmYKGQjNzOCXhAIQzte2sgYY7zEgDDgGQPQHSAQaAmhsIiBhOWFmNmZjZDkxN2E3NWRkZDVkOGJkYjZkOGM0NDQ5Ng; __ac_signature=_02B4Z6wo00f01GnsMRQAAIDBY8rqvlBzsRhpzDWAAHw-eb; FOLLOW_LIVE_POINT_INFO=%22MS4wLjABAAAAfAS7FbtmU-rQ7alBP_D6bJBIWX27xHGXI0bVcHoisis%2F1716393600000%2F0%2F0%2F1716370567576%22; stream_player_status_params=%22%7B%5C%22is_auto_play%5C%22%3A0%2C%5C%22is_full_screen%5C%22%3A0%2C%5C%22is_full_webscreen%5C%22%3A0%2C%5C%22is_mute%5C%22%3A1%2C%5C%22is_speed%5C%22%3A1%2C%5C%22is_visible%5C%22%3A1%7D%22; WallpaperGuide=%7B%22showTime%22%3A1716188223721%2C%22closeTime%22%3A0%2C%22showCount%22%3A2%2C%22cursor1%22%3A87%2C%22cursor2%22%3A0%2C%22hoverTime%22%3A1716352032390%7D; __ac_nonce=0664dbd4e00c752141901; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1920%2C%5C%22screen_height%5C%22%3A1080%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A12%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A10%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A150%7D%22; FOLLOW_NUMBER_YELLOW_POINT_INFO=%22MS4wLjABAAAAfAS7FbtmU-rQ7alBP_D6bJBIWX27xHGXI0bVcHoisis%2F1716393600000%2F1716369970156%2F0%2F1716372013022%22; FRIEND_NUMBER_RED_POINT_INFO=%22MS4wLjABAAAAfAS7FbtmU-rQ7alBP_D6bJBIWX27xHGXI0bVcHoisis%2F1716393600000%2F1716370815219%2F0%2F0%22; passport_fe_beating_status=true; home_can_add_dy_2_desktop=%221%22; xg_device_score=7.740503633714868; live_can_add_dy_2_desktop=%221%22; IsDouyinActive=true; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCR1NCbXBuQWhMRFg3TERDUVZqZnRDSHJXa1FTNzZNR1ZPcDI4YXB1WmhTd3B0YnArM1NKRCt1b2lZTFFacENDS2JaMEZkaFZUcEtyei9sU0ZzNTlWNUk9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoxfQ%3D%3D; odin_tt=5cb1890563132950efc6a30651b7131a6421e8423d05672245eecc5f5c052cd9122f6a6314b1a40c1ac0bb1eeb70a9df50bcfee6bde0eee4a5e5dbc2b6516455; msToken=0x6ze9kt9qdjqmsf_mqiXzhZKT4cP3vD1AxZuFg6AQJy6LhFHm5R_Fzq_KtFkuAX9iDg2OJypnqfKSuv95TG7T1oGzcaHkGXLJLG7WAqAg2rQdM9DXA="; + String roomId = "47678148825"; + String cookie = "bd_ticket_guard_client_web_domain=2; passport_csrf_token=7ffb8b8fa7a1755db97fe36c23b2b4e6; passport_csrf_token_default=7ffb8b8fa7a1755db97fe36c23b2b4e6; SEARCH_RESULT_LIST_TYPE=%22single%22; strategyABtestKey=%221718075897.038%22; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; csrf_session_id=436cc9216870e18f303417c5bcae5f70; passport_assist_user=CkEd-hBNPxDPo8jSy2_SAQ1QyuMpdEF7KSknM9STv3pitdhOdoiS-q2jTP-OSkAKU1irJAsU6KvT7u-TabgCliye3xpKCjz_QBK83x7ywBVzEnfGwAfV4gdN0GteGVFmuYK2AO37BFM38PWx5kVG_mG14ngdnkHeYJfT5Y7y5r-f-0EQ99rTDRiJr9ZUIAEiAQO_x4an; n_mh=fo-jpdvR_LTh0xqGcSh8zbW8MJO9YTly2kmcGDTTduI; sso_uid_tt=1893916d9a25805c3d40ce1b12e2bdf1; sso_uid_tt_ss=1893916d9a25805c3d40ce1b12e2bdf1; toutiao_sso_user=60c0a0cb4d91d28583b0e652110b6538; toutiao_sso_user_ss=60c0a0cb4d91d28583b0e652110b6538; sid_ucp_sso_v1=1.0.0-KDdjZWNkYzI4YzM0YWRkY2EzYWI0MGQ2MzhmNzllZjk3YzllMDdhMDcKIQiv2KCu8Y3qBhCihJ-zBhjvMSAMMLy5xY8GOAZA9AdIBhoCaGwiIDYwYzBhMGNiNGQ5MWQyODU4M2IwZTY1MjExMGI2NTM4; ssid_ucp_sso_v1=1.0.0-KDdjZWNkYzI4YzM0YWRkY2EzYWI0MGQ2MzhmNzllZjk3YzllMDdhMDcKIQiv2KCu8Y3qBhCihJ-zBhjvMSAMMLy5xY8GOAZA9AdIBhoCaGwiIDYwYzBhMGNiNGQ5MWQyODU4M2IwZTY1MjExMGI2NTM4; passport_auth_status=29fb05d66937a448685d372f7b302fb7%2C; passport_auth_status_ss=29fb05d66937a448685d372f7b302fb7%2C; uid_tt=72b4a9f97b9a58124c6d08f2b8c3ae1c; uid_tt_ss=72b4a9f97b9a58124c6d08f2b8c3ae1c; sid_tt=b73b11fd75784ffb396ccc54a5c697e8; sessionid=b73b11fd75784ffb396ccc54a5c697e8; sessionid_ss=b73b11fd75784ffb396ccc54a5c697e8; _bd_ticket_crypt_doamin=2; _bd_ticket_crypt_cookie=3fa3243ffc5678ffdaf08bc794f5c46d; publish_badge_show_info=%220%2C0%2C0%2C1718075943142%22; __security_server_data_status=1; sid_guard=b73b11fd75784ffb396ccc54a5c697e8%7C1718075944%7C5183997%7CSat%2C+10-Aug-2024+03%3A19%3A01+GMT; sid_ucp_v1=1.0.0-KDk1NDU3ZjEwNmQxYzFhZTc0ZTZhN2MyNGNhOTY3MWIyNjE5YWVmMzEKGwiv2KCu8Y3qBhCohJ-zBhjvMSAMOAZA9AdIBBoCbGYiIGI3M2IxMWZkNzU3ODRmZmIzOTZjY2M1NGE1YzY5N2U4; ssid_ucp_v1=1.0.0-KDk1NDU3ZjEwNmQxYzFhZTc0ZTZhN2MyNGNhOTY3MWIyNjE5YWVmMzEKGwiv2KCu8Y3qBhCohJ-zBhjvMSAMOAZA9AdIBBoCbGYiIGI3M2IxMWZkNzU3ODRmZmIzOTZjY2M1NGE1YzY5N2U4; store-region=cn-ha; store-region-src=uid; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1920%2C%5C%22screen_height%5C%22%3A1200%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A16%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A0.8%2C%5C%22effective_type%5C%22%3A%5C%223g%5C%22%2C%5C%22round_trip_time%5C%22%3A350%7D%22; stream_player_status_params=%22%7B%5C%22is_auto_play%5C%22%3A0%2C%5C%22is_full_screen%5C%22%3A0%2C%5C%22is_full_webscreen%5C%22%3A0%2C%5C%22is_mute%5C%22%3A1%2C%5C%22is_speed%5C%22%3A1%2C%5C%22is_visible%5C%22%3A1%7D%22; FOLLOW_NUMBER_YELLOW_POINT_INFO=%22MS4wLjABAAAA6sMxlhLaCL7s471LL4qiDjsqkYVwIWnA0TvZyIa0qLTPDeYexK39ZK4aWu39ZIHC%2F1718121600000%2F0%2F0%2F1718079328944%22; FOLLOW_LIVE_POINT_INFO=%22MS4wLjABAAAA6sMxlhLaCL7s471LL4qiDjsqkYVwIWnA0TvZyIa0qLTPDeYexK39ZK4aWu39ZIHC%2F1718121600000%2F0%2F0%2F1718078730788%22; home_can_add_dy_2_desktop=%221%22; __live_version__=%221.1.2.904%22; has_avx2=null; device_web_cpu_core=16; device_web_memory_size=8; live_use_vvc=%22false%22; xgplayer_user_id=325174987665; webcast_leading_last_show_time=1718078142087; webcast_leading_total_show_times=1; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.692%7D; s_v_web_id=verify_lx9ve7bp_imO5HGZ3_FTzG_4eKu_9a5B_4uHjzsrNWqeB; ttwid=1%7Cfc9BJdwMDsA_y7BGSOBm5HEMsU8iIYjtH1OeyeRQWeY%7C1718078190%7C31b06363200bf25f027bdaf5002f5398cb884c640bf726193533fcf1b06ce369; msToken=qjXhncxguu-6sjwZTmWH9goaeN-GqUsk8pDt5Szj5D5jS0gWIuhmkB9LSwTJvhNlknGsYlgsXa0EgkhMZ7V7Wz2cVCeN4URZ0YpbmggVojDFYwozCT-daytn9VfqcA==; webcast_local_quality=origin; download_guide=%223%2F20240611%2F1%22; __ac_nonce=06667f0c2003149662ac0; __ac_signature=_02B4Z6wo00f01nZfMzgAAIDDqiasj8YFk6p2fzeAAPv.12; pwa2=%220%7C0%7C3%7C0%22; odin_tt=ce1a94f911cc3c6e5f9e3904a9cb66cacaca373d6e28858f28e2b435062d8cf245955f328cab76b4d15482208883d0fa; xg_device_score=7.682148328545583; live_can_add_dy_2_desktop=%221%22; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCTi9RN3Vja0VYZ0Ftc25VaXJFbi9uZU5ReWoyeXIwZkc3RFNSQWIzbEtzY1ZPNW12WWVSeHZYZ1RPaFlEdjdrOThqWnBPN1JYN2p0ZFQ4SHpZSHVsV1k9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoxfQ%3D%3D; msToken=hlmI9OS584NY4tSI33AgKnI4lWR3_SU_5mYKOHpzFFeWoAbHHdQ9FUHcKOq3IdC5z-owRJeKsGblTQK3ArSx7Rty9iXaefee0haY5osTcCrSRVnzfqll; passport_fe_beating_status=true; IsDouyinActive=false"; log.error("cookie: {}", cookie); DouyinLiveChatClientConfig config = DouyinLiveChatClientConfig.builder() // .forwardWebsocketUri("ws://127.0.0.1:8080/websocket") // TODO 浏览器Cookie .cookie(cookie) - .roomId("380874233822") + .roomId(roomId) .build(); client = new DouyinLiveChatClient(config, new IDouyinMsgListener() { @Override public void onMsg(IMsg msg) { - // log.debug("收到{}消息 {}", msg.getClass(), msg); + log.debug("收到{}消息 {}", msg.getClass(), msg); } @Override public void onCmdMsg(DouyinCmdEnum cmd, ICmdMsg cmdMsg) { - // log.debug("收到CMD消息{} {}", cmd, cmdMsg); + log.debug("收到CMD消息{} {}", cmd, cmdMsg); } @Override @@ -121,13 +134,19 @@ class DouyinLiveChatClientTest { } catch (InterruptedException e) { throw new RuntimeException(e); } -// String jianyi = jsonObject.getStr("回答建议"); -// if(StringUtils.isNotBlank(jianyi)){ - client.sendDanmu("腿好看", () -> { - log.warn("弹幕发送成功"); - }); -// } -// } + //TODO 接受到的用户消息,判断是否需要回复 + String content = msg.getContent(); + //先判断 该消息是否需要回复 + if (contentIsVaild(binaryFrameHandler,msg) && !(shieldUserIdList.contains(msg.getUid())) && !(shieldNickNameList.contains(msg.getUsername()))) { + //调用chat 获取回答消息 + String replyMessage = AiChatUtil.formatCompletionOutContent(AiChatUtil.chatCompletions(content)); + if(StringUtils.isNotBlank(replyMessage)){ + //发送 + client.sendDanmu(replyMessage, () -> { + log.warn("弹幕发送成功"); + }); + } + } } @Override @@ -199,4 +218,17 @@ class DouyinLiveChatClientTest { } } -} \ No newline at end of file + /** + * 判断是否回复 + * @param binaryFrameHandler + * @param msg 消息对象 + * @return + */ + public static boolean contentIsVaild(DouyinBinaryFrameHandler binaryFrameHandler, DouyinDanmuMsg msg){ +// msg.getContent();// 消息 +// msg.getUid();//发送人id +// msg.getUsername();//发送人名称 + return true; + } + +}