- 连接安全加密 与 双向签名验证 (防止未授权客户端接入 与 防止连接破解者服务器绕过授权(如果把 IRC 登录和授权绑在一起的话))
- 客户端登录检查 (通过配置以禁止低版本客户端登录)
- 用户名密码/token登录
- 公开聊天和用户名之间私有聊天
- 游戏内 ID 共享 (以允许制作同客户端用户不互相攻击)
- 游戏内 披风与皮肤 共享
- 同用户名多设备登录兼容 (允许一个人开多个客户端连接)
- 管理:游戏内使用 指令 管理
- 管理:通过 API 管理
DarkIRC 使用 Gradle 完成构建, 因此你需要安装它. 你可以在这里找到它 .
在开始之前, 你需要安装最低版本为 17 的 JDK.
- 克隆这个存储库
git clone https://github.com/DarkMeowTeam/DarkIRC/. CD进入这个目录.- 运行
gradle IRCServer:installDist以构建服务端 - 执行
cd .\IRCServer\build\install\IRCServer\bin\和IRCServer以启动服务端
在 build.gradle.kts 添加以下内容 (如果你使用的是其它系统 请自行转换)
val ircVersion: String by project
repositories {
maven("https://nekocurit.asia/repository/release")
}
dependencies {
implementation("net.darkmeow:IRCClient-all:$ircVersion")
}也可以自行构建
最小化示例代码:
public void connect() throws Throwable {
final IRCClientProvider client = new IRCClient(new TestListener(), IRCClientOptions.builder()
.host(System.getenv("IRC_SERVER")) // 服务器地址
.port(Integer.parseInt(System.getenv("IRC_PORT"))) // 服务器端口
.brand(new DataClientBrand("default", "Test", 1)) // 客户端标识
.build()
);
client.connect();
System.out.println("连接成功");
}
public class TestListener extends IRCClientListenableSimple {
@Override
public void onDisconnect(EnumDisconnectType type, String reason, boolean logout) {
System.out.println(reason);
}
@Override
public void onReadyLogin(IRCClientProvider client) {
client.login(System.getenv("IRC_USERNAME"), System.getenv("IRC_PASSWORD"), false);
}
@Override
public void onUpdateUserInfo(IRCDataSelfSessionInfo info, boolean isFirstLogin) {
// 服务端可能会二次下发用户信息 (比如说你从普通用户变成管理员)
if (isFirstLogin) {
System.out.println("登录成功(用户名:" + info.getName() + ")");
}
}
}-
在服务端上安装 JDK 17 (如果已安装该版本或更高版本 JDK 则不需要) 并上传
IRCServer-xxx.jar -
运行
java -jar IRCServer-xxx.jar -
观察运行目录 你应该能看到
config.yml编辑它
# 数据库
database:
url: "jdbc:sqlite:data.db"
driver: "org.sqlite.JDBC"
user: ""
password: ""
ircServer:
host: "0.0.0.0"
port: 45020
# 是否开启代理协议 (常用于通过 frp/cdn)
proxyProtocol: false
# 是否开启连接加密 会在握手完成后开始
encryption: true
# 是否开启签名验证 开启后需要在客户端配置系统的私钥 仅在 encryption 开启时工作
signature: true
# 数据压缩配置
compression:
state: true
threshold: 256
userLimit:
# 是否允许单一用户同时在多个不同的设备上登陆
allowMultiDeviceLogin: true
webServer:
# API访问IP白名单
ipWhiteList: [""]
key: ""
port: 45021