mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
实现onebot协议中
This commit is contained in:
parent
881570c513
commit
9757fbd877
17
src/renderer.d.ts → src/global.d.ts
vendored
17
src/renderer.d.ts → src/global.d.ts
vendored
@ -9,9 +9,9 @@ declare type Peer = {
|
|||||||
uid: string // qq号
|
uid: string // qq号
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MessageElement{
|
interface MessageElement {
|
||||||
raw: {
|
raw: {
|
||||||
elements:{
|
elements: {
|
||||||
raw: {
|
raw: {
|
||||||
replyElement: {
|
replyElement: {
|
||||||
senderUid: string, // 原消息发送者QQ号
|
senderUid: string, // 原消息发送者QQ号
|
||||||
@ -79,7 +79,16 @@ declare var LLAPI: {
|
|||||||
getFriendsList(forced: boolean): Promise<User[]>
|
getFriendsList(forced: boolean): Promise<User[]>
|
||||||
};
|
};
|
||||||
|
|
||||||
|
declare type PostDataSendMsg = {
|
||||||
|
action: "send_private_msg" | "send_group_msg" | "get_group_list",
|
||||||
|
params: {
|
||||||
|
user_id: string,
|
||||||
|
group_id: string,
|
||||||
|
message: SendMessage[];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
declare var llonebot: {
|
declare var llonebot: {
|
||||||
listenSendMessage: (handle: (msg: any)=>void)=>void
|
listenSendMessage: (handle: (msg: PostDataSendMsg) => void) => void
|
||||||
startExpress: ()=>void
|
startExpress: () => void
|
||||||
};
|
};
|
58
src/main.ts
58
src/main.ts
@ -1,81 +1,36 @@
|
|||||||
// 运行在 Electron 主进程 下的插件入口
|
// 运行在 Electron 主进程 下的插件入口
|
||||||
|
|
||||||
const express = require("express")
|
const express = require("express")
|
||||||
const { ipcMain } = require('electron');
|
const {ipcMain, webContents} = require('electron');
|
||||||
const { webContents } = require('electron')
|
|
||||||
|
|
||||||
const CHANNEL_SEND_MSG = "llonebot_sendMsg"
|
const CHANNEL_SEND_MSG = "llonebot_sendMsg"
|
||||||
|
|
||||||
type PostDataSendMsg = {
|
function sendIPCCallSendQQMsg(postData: PostDataSendMsg) {
|
||||||
action: string,
|
|
||||||
params: {
|
|
||||||
user_id: string,
|
|
||||||
group_id: string,
|
|
||||||
message: SendMessage[];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendIPCCallSendQQMsg(postData: PostDataSendMsg){
|
|
||||||
let contents = webContents.getAllWebContents();
|
let contents = webContents.getAllWebContents();
|
||||||
for (const content of contents) {
|
for (const content of contents) {
|
||||||
try{
|
try {
|
||||||
content.send(CHANNEL_SEND_MSG, postData)
|
content.send(CHANNEL_SEND_MSG, postData)
|
||||||
}catch (e) {
|
} catch (e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function startExpress(event: any){
|
function startExpress(event: any) {
|
||||||
// const original_send = (window.webContents.__qqntim_original_object && window.webContents.__qqntim_original_object.send) || window.webContents.send;
|
// const original_send = (window.webContents.__qqntim_original_object && window.webContents.__qqntim_original_object.send) || window.webContents.send;
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 3000;
|
const port = 3000;
|
||||||
|
|
||||||
// 中间件,用于解析POST请求的请求体
|
// 中间件,用于解析POST请求的请求体
|
||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({extended: true}));
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
|
|
||||||
app.get('/', (req: any, res: any) => {
|
app.get('/', (req: any, res: any) => {
|
||||||
// original_send.call(window.webContents, "发送消息", {test: "test"})
|
|
||||||
// event.reply("发送消息", {test: "test"})
|
|
||||||
|
|
||||||
res.send('llonebot已启动');
|
res.send('llonebot已启动');
|
||||||
})
|
})
|
||||||
// 处理POST请求的路由
|
// 处理POST请求的路由
|
||||||
app.post('/', (req: any, res: any) => {
|
app.post('/', (req: any, res: any) => {
|
||||||
let jsonData: PostDataSendMsg = req.body;
|
let jsonData: PostDataSendMsg = req.body;
|
||||||
sendIPCCallSendQQMsg(jsonData);
|
sendIPCCallSendQQMsg(jsonData);
|
||||||
// let json_data: {action: string, params: {
|
|
||||||
// user_id: string,
|
|
||||||
// group_id: string,
|
|
||||||
// message: SendMessage[];
|
|
||||||
// }} = req.body;
|
|
||||||
// let peer: Peer| null = null;
|
|
||||||
// if (json_data.action == "send_private_msg"){
|
|
||||||
// let friend = getFriend(json_data.params.user_id)
|
|
||||||
// if (friend) {
|
|
||||||
// peer = {
|
|
||||||
// chatType: "private",
|
|
||||||
// name: friend.nickName,
|
|
||||||
// uid: friend.uin
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else if (json_data.action == "send_group_msg"){
|
|
||||||
// let group = getGroup(json_data.params.group_id)
|
|
||||||
// if (group){
|
|
||||||
// peer = {
|
|
||||||
// chatType: "group",
|
|
||||||
// name: group.name,
|
|
||||||
// uid: group.uid
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (peer) {
|
|
||||||
// original_send.call(window.webContents, "发送消息", peer, json_data.params.message)
|
|
||||||
// LLAPI.sendMessage(peer, json_data.params.message).then(res => console.log("消息发送成功:", res),
|
|
||||||
// err => console.log("消息发送失败", json_data, err))
|
|
||||||
// }
|
|
||||||
// console.log(req.body); // 输出POST请求的请求体数据
|
|
||||||
res.send('POST请求已收到');
|
res.send('POST请求已收到');
|
||||||
});
|
});
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
@ -84,7 +39,6 @@ function startExpress(event: any){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 加载插件时触发
|
// 加载插件时触发
|
||||||
function onLoad(plugin: any) {
|
function onLoad(plugin: any) {
|
||||||
ipcMain.on("startExpress", (event: any, arg: any) => {
|
ipcMain.on("startExpress", (event: any, arg: any) => {
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
// Electron 主进程 与 渲染进程 交互的桥梁
|
// Electron 主进程 与 渲染进程 交互的桥梁
|
||||||
const { contextBridge } = require("electron");
|
|
||||||
const { ipcRenderer } = require('electron');
|
const {contextBridge} = require("electron");
|
||||||
|
const {ipcRenderer} = require('electron');
|
||||||
|
|
||||||
// 在window对象下导出只读对象
|
// 在window对象下导出只读对象
|
||||||
contextBridge.exposeInMainWorld("llonebot", {
|
contextBridge.exposeInMainWorld("llonebot", {
|
||||||
listenSendMessage: (handle: (msg: any)=>void)=>{
|
listenSendMessage: (handle: (jsonData: PostDataSendMsg) => void) => {
|
||||||
ipcRenderer.on("sendMsg", (event: any, args: any) => {
|
ipcRenderer.on("sendMsg", (event: any, args: PostDataSendMsg) => {
|
||||||
handle("收到ipc消息:发送消息")
|
handle(args)
|
||||||
console.log("收到ipc消息:发送消息", args); // 处理主进程发送的消息
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
startExpress:()=>{
|
startExpress: () => {
|
||||||
ipcRenderer.send("startExpress");
|
ipcRenderer.send("startExpress");
|
||||||
}
|
}
|
||||||
// startExpress,
|
// startExpress,
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
/// <reference path="./renderer.d.ts" />
|
/// <reference path="./global.d.ts" />
|
||||||
|
|
||||||
// import express from "express";
|
// import express from "express";
|
||||||
// const { ipcRenderer } = require('electron');
|
// const { ipcRenderer } = require('electron');
|
||||||
|
|
||||||
|
|
||||||
const host = "http://localhost:5000"
|
const host = "http://localhost:5000"
|
||||||
|
|
||||||
let groups: Group[] = []
|
let groups: Group[] = []
|
||||||
let friends: User[] = []
|
let friends: User[] = []
|
||||||
|
|
||||||
function getFriend(qq: string){
|
function getFriend(qq: string) {
|
||||||
return friends.find(friend => friend.uid == qq)
|
return friends.find(friend => friend.uid == qq)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,8 +21,46 @@ let self_qq: string = ""
|
|||||||
|
|
||||||
let uid_maps: Record<string, string> = {} // 一串加密的字符串 -> qq号
|
let uid_maps: Record<string, string> = {} // 一串加密的字符串 -> qq号
|
||||||
|
|
||||||
function onLoad(){
|
function onLoad() {
|
||||||
llonebot.startExpress();
|
llonebot.startExpress();
|
||||||
|
llonebot.listenSendMessage((postData: PostDataSendMsg) => {
|
||||||
|
if (postData.action == "send_private_msg" || postData.action == "send_group_msg") {
|
||||||
|
let peer: Peer | null = null;
|
||||||
|
if (postData.action == "send_private_msg") {
|
||||||
|
let friend = getFriend(postData.params.user_id)
|
||||||
|
if (friend) {
|
||||||
|
peer = {
|
||||||
|
chatType: "private",
|
||||||
|
name: friend.nickName,
|
||||||
|
uid: friend.uin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (postData.action == "send_group_msg") {
|
||||||
|
let group = getGroup(postData.params.group_id)
|
||||||
|
if (group) {
|
||||||
|
peer = {
|
||||||
|
chatType: "group",
|
||||||
|
name: group.name,
|
||||||
|
uid: group.uid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (peer) {
|
||||||
|
LLAPI.sendMessage(peer, postData.params.message).then(res => console.log("消息发送成功:", res),
|
||||||
|
err => console.log("消息发送失败", postData, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (postData.action == "get_group_list"){
|
||||||
|
let groupsData = groups.map(group => {
|
||||||
|
return {
|
||||||
|
group_id: group.uid,
|
||||||
|
group_name: group.name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
window.LLAPI.getAccountInfo().then(accountInfo => {
|
window.LLAPI.getAccountInfo().then(accountInfo => {
|
||||||
self_qq = accountInfo.uid
|
self_qq = accountInfo.uid
|
||||||
})
|
})
|
||||||
@ -30,12 +69,7 @@ function onLoad(){
|
|||||||
groups = groupsList
|
groups = groupsList
|
||||||
})
|
})
|
||||||
window.LLAPI.on("new-messages", (messages) => {
|
window.LLAPI.on("new-messages", (messages) => {
|
||||||
try{
|
console.log("收到新消息", messages)
|
||||||
llonebot.listenSendMessage(console.log);
|
|
||||||
console.log("ipc监听成功")
|
|
||||||
} catch (e){
|
|
||||||
console.log("ipc监听失败", e)
|
|
||||||
}
|
|
||||||
messages.forEach(message => {
|
messages.forEach(message => {
|
||||||
let onebot_message_data: any = {
|
let onebot_message_data: any = {
|
||||||
self: {
|
self: {
|
||||||
@ -46,24 +80,21 @@ function onLoad(){
|
|||||||
type: "message",
|
type: "message",
|
||||||
detail_type: message.peer.chatType,
|
detail_type: message.peer.chatType,
|
||||||
sub_type: "",
|
sub_type: "",
|
||||||
message: message.raw.elements.map(element=>{
|
message: message.raw.elements.map(element => {
|
||||||
let message_data: any = {
|
let message_data: any = {
|
||||||
data: {}
|
data: {}
|
||||||
}
|
}
|
||||||
if (element.raw.textElement?.atType == AtType.atUser){
|
if (element.raw.textElement?.atType == AtType.atUser) {
|
||||||
message_data["type"] = "at"
|
message_data["type"] = "at"
|
||||||
message_data["data"]["mention"] = element.raw.textElement.atUid
|
message_data["data"]["mention"] = element.raw.textElement.atUid
|
||||||
}
|
} else if (element.raw.textElement) {
|
||||||
else if (element.raw.textElement){
|
|
||||||
message_data["type"] = "text"
|
message_data["type"] = "text"
|
||||||
message_data["data"]["text"] = element.raw.textElement.content
|
message_data["data"]["text"] = element.raw.textElement.content
|
||||||
}
|
} else if (element.raw.picElement) {
|
||||||
else if (element.raw.picElement){
|
|
||||||
message_data["type"] = "image"
|
message_data["type"] = "image"
|
||||||
message_data["data"]["file_id"] = element.raw.picElement.fileUuid
|
message_data["data"]["file_id"] = element.raw.picElement.fileUuid
|
||||||
message_data["data"]["path"] = element.raw.picElement.sourcePath
|
message_data["data"]["path"] = element.raw.picElement.sourcePath
|
||||||
}
|
} else if (element.raw.replyElement) {
|
||||||
else if (element.raw.replyElement){
|
|
||||||
message_data["type"] = "reply"
|
message_data["type"] = "reply"
|
||||||
message_data["data"]["reply"] = element.raw.replyElement.sourceMsgIdInRecords
|
message_data["data"]["reply"] = element.raw.replyElement.sourceMsgIdInRecords
|
||||||
}
|
}
|
||||||
@ -71,12 +102,11 @@ function onLoad(){
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.peer.chatType == "group"){
|
if (message.peer.chatType == "group") {
|
||||||
onebot_message_data["group_id"] = message.peer.uid
|
onebot_message_data["group_id"] = message.peer.uid
|
||||||
// todo: 将加密的uid转成qq号
|
// todo: 将加密的uid转成qq号
|
||||||
onebot_message_data["user_id"] = message.sender.uid
|
onebot_message_data["user_id"] = message.sender.uid
|
||||||
}
|
} else if (message.peer.chatType == "private") {
|
||||||
else if (message.peer.chatType == "private"){
|
|
||||||
onebot_message_data["user_id"] = message.peer.uid
|
onebot_message_data["user_id"] = message.peer.uid
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +116,8 @@ function onLoad(){
|
|||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
},
|
},
|
||||||
body: JSON.stringify(onebot_message_data)
|
body: JSON.stringify(onebot_message_data)
|
||||||
}).then(res => {}, err => {
|
}).then(res => {
|
||||||
|
}, err => {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user