Add direct method to provide sessionId and ttTargetIdc for sending chats from 1 client.

This commit is contained in:
kohlerpop1
2025-10-06 23:08:10 -04:00
parent 7589a2ac4a
commit cfdced9645
5 changed files with 22 additions and 9 deletions

View File

@@ -66,5 +66,5 @@ public interface LiveHttpClient
LiveConnectionData.Response fetchLiveConnectionData(LiveConnectionData.Request request);
boolean sendChat(LiveRoomInfo roomInfo, String content);
boolean sendChat(LiveRoomInfo roomInfo, String content, String sessionId, String ttTargetIdc);
}

View File

@@ -102,4 +102,12 @@ public interface LiveClient {
* <p>We cannot fix this as it is a TikTok issue, not a library issue.
*/
boolean sendChat(String content);
/**
* Send a chat message to the connected room
* @return true if successful, otherwise false
* @apiNote This is known to return true on some sessionIds despite failing!
* <p>We cannot fix this as it is a TikTok issue, not a library issue.
*/
boolean sendChat(String content, String sessionId, String ttTargetIdc);
}

View File

@@ -199,7 +199,12 @@ public class TikTokLiveClient implements LiveClient
@Override
public boolean sendChat(String content) {
return httpClient.sendChat(roomInfo, content);
return sendChat(content, clientSettings.getSessionId(), clientSettings.getTtTargetIdc());
}
@Override
public boolean sendChat(String content, String sessionId, String ttTargetIdc) {
return httpClient.sendChat(roomInfo, content, sessionId, ttTargetIdc);
}
public void connectAsync(Consumer<LiveClient> onConnection) {

View File

@@ -182,23 +182,23 @@ public class TikTokLiveHttpClient implements LiveHttpClient
}
@Override
public boolean sendChat(LiveRoomInfo roomInfo, String content) {
public boolean sendChat(LiveRoomInfo roomInfo, String content, String sessionId, String ttTargetIdc) {
var proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings();
if (proxyClientSettings.isEnabled()) {
while (proxyClientSettings.hasNext()) {
try {
return requestSendChat(roomInfo, content);
return requestSendChat(roomInfo, content, sessionId, ttTargetIdc);
} catch (TikTokProxyRequestException ignored) {}
}
}
return requestSendChat(roomInfo, content);
return requestSendChat(roomInfo, content, sessionId, ttTargetIdc);
}
public boolean requestSendChat(LiveRoomInfo roomInfo, String content) {
public boolean requestSendChat(LiveRoomInfo roomInfo, String content, String sessionId, String ttTargetIdc) {
JsonObject body = new JsonObject();
body.addProperty("content", content);
body.addProperty("sessionId", clientSettings.getSessionId());
body.addProperty("ttTargetIdc", clientSettings.getTtTargetIdc());
body.addProperty("sessionId", sessionId);
body.addProperty("ttTargetIdc", ttTargetIdc);
body.addProperty("roomId", roomInfo.getRoomId());
HttpClientBuilder builder = httpFactory.client(clientSettings.isUseEulerstreamEnterprise() ? TIKTOK_CHAT_ENTERPRISE_URL : TIKTOK_CHAT_URL)
.withHeader("Content-Type", "application/json");

View File

@@ -64,7 +64,7 @@ public class TikTokLiveHttpOfflineClient implements LiveHttpClient {
}
@Override
public boolean sendChat(LiveRoomInfo roomInfo, String content) {
public boolean sendChat(LiveRoomInfo roomInfo, String content, String sessionId, String ttTargetIdc) {
// DO NOTHING
return false;
}