Appearance
开放接口(open-api)
提供外部通过 http
访问内部的实现
提示
非本地调用时, 需要在 配置文件
中添加调用者 IP
至 白名单
中
内置接口
/bot/api/sendGroup
发送群消息, POST 方式, 参数 content, groupId(可选, 默认值为 group.current)/bot/api/sendUser
发送用户消息, POST 方式, 参数 content, userId
自定义接口

代码
java
const config = require('config')
function action(request, response) {
// 打印 request
console.log(request)
const msg = '饿了, 我要吃饭饭'
bot.sendGroup(config.get('group.current'), msg)
// 把响应内容放到 response.data 中
response.data = { msg: 'ok' }
}
访问路径为: /api + 自定义接口路径
如: /api/sendGroupMessage
使用场景
- 当玩家抽奖获得极品道具时
- BOSS 击杀竞速刷新榜单时
- 副本组队召集队友时
- 秒杀活动即将售空时
- 发送指定群消息
- ...
栗子截图


提示
推送的内容是完全自定义的, 图中内容仅作演示
在抽奖脚本中, 获取抽到的道具名, 获取道具属性, 获取中奖玩家名, 然后拼接模板, 最后调用机器人发送消息
某些功能可能需要在源码中实现
在游戏脚本中调用接口
查看 item 名字
details
function getItemName(item) {
return Packages.server.MapleItemInformationProvider.getInstance().getName(item.getItemId())
}
function getItemNameById(id) {
return Packages.server.MapleItemInformationProvider.getInstance().getName(id)
}
使用方式
js code
js
function pushMsg(msg) {
if (java.lang.System.getProperty("bot.enable") == "false") {
return
}
var baseUrl = java.lang.System.getProperty("bot.baseUrl")
var api = (baseUrl ? baseUrl : "http://localhost:9600") + "/bot/api/sendGroup"
var ar = new java.lang.Runnable {
run: function() {
var out = null;
var conn = null;
try{
conn = new java.net.URL(api).openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
//获取输出流
out = new java.io.OutputStreamWriter(conn.getOutputStream(), "UTF-8");
out.write(JSON.stringify({
content: String(msg)
}));
out.flush();
out.close();
// 发送请求
conn.getResponseCode();
} catch (e) {
print(e);
} finally {
try{
if (out != null) {
out.close();
}
}catch (e){
print(e);
}
try {
if (conn != null) {
conn.disconnect();
}
} catch (e) {
print(e);
}
}
}
}
new java.lang.Thread(ar).start();
}
java code
java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import okhttp3.*;
import java.io.IOException;
public class Bot {
// 建议这个值改为配置文件加载
public static String baseUrl = "http://localhost:9600"; // ServerProperties.getProperty("bot.baseUrl", "http://localhost:9600");
// 建议这个值改为配置文件加载, 是否启用
public static boolean enable = true; // ServerProperties.getProperty("bot.enable", false);
private static OkHttpClient okhttp = new OkHttpClient();
private static ObjectMapper objectMapper = new ObjectMapper();
// 异常次数, 不要求太精准, 不考虑线程安全
private static int errorCount;
/**
* 异步发送消息, 不阻塞线程, < > & 这 3 个特殊字符要使用 html 字符转义
* @param content
* @param groupId 可选参数
*/
public static void sendGroupMessage(String content, String groupId) {
ObjectNode objectNode = objectMapper.createObjectNode();
objectNode.put("content", content);
if (groupId != null) objectNode.put("groupId", groupId);
post("/bot/api/sendGroup", objectNode.toString());
}
public static void sendGroupMessage(String content) {
sendGroupMessage(content, null);
}
/**
* 异步发送消息, 不阻塞线程, < > & 这 3 个特殊字符要使用 html 字符转义
* @param content
* @param userId 可选参数
*/
public static void sendGroupMemberMessage(String content, String userId) {
ObjectNode objectNode = objectMapper.createObjectNode();
objectNode.put("content", content);
objectNode.put("userId", userId);
post("/api/sendGroupMember", objectNode.toString());
}
private static void post(String api, String body) {
if (!enable) return;
Request request = new Request.Builder()
// .post(RequestBody.create(body, MediaType.parse("application/json"))) // jdk8+ okhttp4
// .post(RequestBody.create(MediaType.parse("application/json"), body)) // jdk7 okhttp3
.post()
.url(baseUrl + api)
.build();
okhttp.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (++errorCount > 5) enable = false;
}
@Override
public void onResponse(Call call, Response response) {
errorCount = 0;
}
});
}
}
/**
* 使用时, 删除本类
* 把下面方法放入 cm 对象中, 脚本通过 cm.sendGroupMessage() 发送消息
*/
class CM {
/**
* 发送群消息
* @param content
*/
public void sendGroupMessage(String content) {
Bot.sendGroupMessage(content);
}
/**
* 发送群成员消息(临时)
* @param content
* @param userId
*/
public void sendGroupMemberMessage(String content, String userId) {
Bot.sendGroupMemberMessage(content, userId);
}
/**
* 开启或关闭机器人
* @param enable
*/
public void enableBot(boolean enable) {
Bot.enable = enable;
}
/**
* 机器人状态
*/
public boolean botStatus() {
return Bot.enable;
}
}
下载依赖(jdk8) 下载依赖(jdk7) 也可以前往 maven
仓库自行下载
jar in script
将 jar 放至 lib 目录下
在工作目录新建 bot.properties 配置文件
在脚本中使用
js
Packages.mxd.bot.sendGroupMessage('内容') // 发送信息