Skip to content

Commit

Permalink
feat: ✨ QQ list command support (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
Aimerny authored Jul 27, 2024
1 parent 741f8c5 commit 71397aa
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 12 deletions.
3 changes: 0 additions & 3 deletions readme-zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,9 +260,6 @@ Kook 消息的格式化文本。占位符与上文同理,所有的服务器名

### qq

> [!NOTE]
> `list` 指令暂未支持
该功能为双向转发,即 MC 内消息会发送到指定 QQ 群,QQ 群内消息将被转发到 MC 内。

#### enable
Expand Down
3 changes: 0 additions & 3 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -260,9 +260,6 @@ Message for `/list` command when player list is empty.

### qq

> [!NOTE]
> The `list` command is not currently available.
The messages from the group will be synchronized to ChatHub and chatHub will forward all public messages to the group.

#### enable
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/zhanganzhi/chathub/platforms/qq/QQAdaptor.java
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,26 @@ public void consumeEvent() {
&& config.getQQGroupId().equals(curEvent.getGroupId().toString())
) {
JSONArray message = curEvent.getMessage();

// list command
if (message.size() == 1) {
if (
"text".equals(message.getJSONObject(0).getString("type")) &&
"/list".equals(message.getJSONObject(0).getJSONObject("data").getString("text"))
) {
sendPublicMessage(getFormatter().formatListAll(chatHub.getProxyServer()));
return;
}
}

// chat
List<String> messages = new ArrayList<>();
for (int i = 0; i < message.size(); i++) {
JSONObject part = message.getJSONObject(i);
if (part.getString("type").equals("text")) {
messages.add(part.getJSONObject("data").getString("text"));
} else if (part.getString("type").equals("image")) {
messages.add("[图片]");
}
}
String content = String.join(" ", messages);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.zhanganzhi.chathub.platforms.qq.dto.QQEvent;
import lombok.Getter;
import lombok.SneakyThrows;
import org.slf4j.Logger;

import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Queue;

Expand All @@ -31,15 +32,15 @@ public QQWsServer(String host, Integer port, String validResourcePath, Queue<QQE

@Override
public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {
logger.info("QQ WebSocket server opened at [{}], path:[{}]", webSocket.getLocalSocketAddress(), clientHandshake.getResourceDescriptor());
logger.info("QQ WebSocket connection opened at [{}], path:[{}]", webSocket.getLocalSocketAddress(), clientHandshake.getResourceDescriptor());
if (validResourcePath.equals(clientHandshake.getResourceDescriptor())) {
clients.add(webSocket);
}
}

@Override
public void onClose(WebSocket webSocket, int i, String s, boolean b) {
logger.info("QQ WebSocket server closed");
logger.info("QQ WebSocket connection closed");
}

@Override
Expand All @@ -52,7 +53,7 @@ public void onMessage(WebSocket webSocket, String msg) {

@Override
public void onError(WebSocket webSocket, Exception e) {
logger.error("QQ WebSocket server error", e);
logger.error("QQ WebSocket connection error", e);
}

@Override
Expand All @@ -62,8 +63,18 @@ public void onStart() {

public void sendMessage(String message) {
logger.debug("QQ WebSocket server send message to clients");
for (WebSocket client : clients) {
client.send(message);
Iterator<WebSocket> iter = clients.iterator();
while (iter.hasNext()) {
WebSocket webSocket = iter.next();
try {
webSocket.send(message);
} catch (Exception e) {
if (!webSocket.isClosed()) {
logger.error("QQ WebSocket connection closed!error: {}", e.getMessage());
webSocket.close();
}
iter.remove();
}
}
}
}

0 comments on commit 71397aa

Please sign in to comment.