n8n-nodes-onebot-api
Version:
OneBot node for n8n workflow, now you can send message to your QQ friend or group. This version includes optimized group and private chat operations and enhanced permission grading. OneBot 节点用于 n8n 工作流,现在您可以向您的 QQ 朋友或群组发送消息。此版本包括优化的群聊和私聊操作以及增强的权限分级。
186 lines • 9.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeGroupOperation = void 0;
const GenericFunctions_1 = require("./GenericFunctions");
async function checkBotGroupPermission(executeFunctions, groupId) {
var _a;
try {
const loginInfo = await GenericFunctions_1.apiRequest.call(executeFunctions, 'GET', 'get_login_info');
if (!((_a = loginInfo === null || loginInfo === void 0 ? void 0 : loginInfo.data) === null || _a === void 0 ? void 0 : _a.user_id)) {
console.error('获取登录信息失败,无法检查权限');
return { isAdmin: false, isOwner: false, canOperate: false };
}
const botId = loginInfo.data.user_id;
console.log(`当前机器人QQ: ${botId}`);
const query = { group_id: groupId, user_id: botId };
const memberInfo = await GenericFunctions_1.apiRequest.call(executeFunctions, 'GET', 'get_group_member_info', undefined, query);
if (!(memberInfo === null || memberInfo === void 0 ? void 0 : memberInfo.data)) {
console.error('获取群成员信息失败,无法检查权限');
return { isAdmin: false, isOwner: false, canOperate: false };
}
const role = memberInfo.data.role || '';
const isOwner = role === 'owner';
const isAdmin = role === 'admin' || isOwner;
console.log(`机器人在群 ${groupId} 中的角色: ${role}, 是管理员: ${isAdmin}, 是群主: ${isOwner}`);
return {
isAdmin,
isOwner,
canOperate: isAdmin
};
}
catch (error) {
console.error('检查权限时出错:', error instanceof Error ? error.message : String(error));
return { isAdmin: false, isOwner: false, canOperate: false };
}
}
async function executeGroupOperation(index) {
const operation = this.getNodeParameter('operation', index);
let responseData = {};
let body = {};
let query = {};
let method = 'GET';
let endpoint = '';
if (operation === 'get_group_list') {
console.log(`执行群组操作: ${operation}`);
endpoint = 'get_group_list';
method = 'GET';
console.log(`执行群组操作: ${operation}, 端点: ${endpoint}`);
responseData = await GenericFunctions_1.apiRequest.call(this, method, endpoint);
return responseData;
}
const groupId = this.getNodeParameter('group_id', index);
console.log(`执行群组操作 ${operation}, 群ID: ${groupId}`);
switch (operation) {
case 'get_group_info':
query.group_id = groupId;
endpoint = 'get_group_info';
method = 'GET';
break;
case 'get_group_member_info':
const memberInfoUserId = this.getNodeParameter('user_id', index);
query.group_id = groupId;
query.user_id = memberInfoUserId;
endpoint = 'get_group_member_info';
method = 'GET';
break;
case 'get_group_member_list':
query.group_id = groupId;
endpoint = 'get_group_member_list';
method = 'GET';
break;
case 'set_group_kick':
const kickPermission = await checkBotGroupPermission(this, groupId);
if (!kickPermission.isAdmin) {
throw new Error(`无法执行操作: 踢出群成员需要管理员权限,当前机器人不是群 ${groupId} 的管理员或群主`);
}
const kickUserId = this.getNodeParameter('user_ids', index);
const rejectAddRequest = this.getNodeParameter('reject_add_request', index);
if (Array.isArray(kickUserId) && kickUserId.length > 0) {
const kickPromises = kickUserId.map(async (userId) => {
const kickBody = {
group_id: groupId,
user_id: userId,
reject_add_request: rejectAddRequest
};
console.log(`踢出成员 ${userId}, 参数:`, JSON.stringify(kickBody));
return await GenericFunctions_1.apiRequest.call(this, 'POST', 'set_group_kick', kickBody);
});
await Promise.all(kickPromises);
return { success: true, message: `已踢出${kickUserId.length}名成员` };
}
else {
throw new Error('未选择要踢出的成员');
}
case 'set_group_ban':
const banPermission = await checkBotGroupPermission(this, groupId);
if (!banPermission.isAdmin) {
throw new Error(`无法执行操作: 禁言群成员需要管理员权限,当前机器人不是群 ${groupId} 的管理员或群主`);
}
const banUserId = this.getNodeParameter('user_ids', index);
const duration = this.getNodeParameter('duration', index);
if (Array.isArray(banUserId) && banUserId.length > 0) {
const banPromises = banUserId.map(async (userId) => {
const banBody = {
group_id: groupId,
user_id: userId,
duration: duration
};
console.log(`禁言成员 ${userId} ${duration}秒, 参数:`, JSON.stringify(banBody));
return await GenericFunctions_1.apiRequest.call(this, 'POST', 'set_group_ban', banBody);
});
await Promise.all(banPromises);
return { success: true, message: `已禁言${banUserId.length}名成员` };
}
else {
throw new Error('未选择要禁言的成员');
}
case 'set_group_whole_ban':
const wholeBanPermission = await checkBotGroupPermission(this, groupId);
if (!wholeBanPermission.isAdmin) {
throw new Error(`无法执行操作: 全员禁言需要管理员权限,当前机器人不是群 ${groupId} 的管理员或群主`);
}
body.group_id = groupId;
body.enable = this.getNodeParameter('enable', index);
endpoint = 'set_group_whole_ban';
method = 'POST';
break;
case 'set_group_name':
const setNamePermission = await checkBotGroupPermission(this, groupId);
if (!setNamePermission.isAdmin) {
throw new Error(`无法执行操作: 设置群名称需要管理员权限,当前机器人不是群 ${groupId} 的管理员或群主`);
}
body.group_id = groupId;
body.group_name = this.getNodeParameter('group_name', index);
endpoint = 'set_group_name';
method = 'POST';
break;
case 'set_group_admin':
const setAdminPermission = await checkBotGroupPermission(this, groupId);
if (!setAdminPermission.isOwner) {
throw new Error(`无法执行操作: 设置管理员需要群主权限,当前机器人不是群 ${groupId} 的群主`);
}
const adminUserId = this.getNodeParameter('user_ids', index);
const enableAdmin = this.getNodeParameter('enable', index);
if (Array.isArray(adminUserId) && adminUserId.length > 0) {
const adminPromises = adminUserId.map(async (userId) => {
const adminBody = {
group_id: groupId,
user_id: userId,
enable: enableAdmin
};
console.log(`${enableAdmin ? '设置' : '取消'}成员 ${userId} 的管理员权限, 参数:`, JSON.stringify(adminBody));
return await GenericFunctions_1.apiRequest.call(this, 'POST', 'set_group_admin', adminBody);
});
await Promise.all(adminPromises);
return { success: true, message: `已${enableAdmin ? '设置' : '取消'}${adminUserId.length}名成员的管理员权限` };
}
else {
throw new Error('未选择要设置管理员权限的成员');
}
case 'group_poke':
body.group_id = groupId;
const pokeUserId = this.getNodeParameter('user_id', index);
body.user_id = pokeUserId;
endpoint = 'send_poke';
method = 'POST';
break;
case 'set_group_sign':
body.group_id = groupId;
endpoint = 'set_group_sign';
method = 'POST';
break;
default:
throw new Error(`未知的群组操作: ${operation}`);
}
if (method === 'GET') {
console.log(`执行群组操作: ${operation}, 端点: ${endpoint}, 查询参数:`, JSON.stringify(query));
responseData = await GenericFunctions_1.apiRequest.call(this, method, endpoint, undefined, query);
}
else {
console.log(`执行群组操作: ${operation}, 端点: ${endpoint}, 请求体:`, JSON.stringify(body));
responseData = await GenericFunctions_1.apiRequest.call(this, method, endpoint, body);
}
return responseData;
}
exports.executeGroupOperation = executeGroupOperation;
//# sourceMappingURL=GroupActions.js.map