UNPKG

@kotori-bot/kotori-plugin-adapter-onebot

Version:

Adapter For Onebot 11

300 lines (299 loc) 10.1 kB
/** * @Package @kotori-bot/kotori-plugin-adapter-onebot * @Version 2.1.1 * @Author Hotaru <me@hotaru.icu> * @Copyright 2024-2025 Hotaru. All rights reserved. * @License BAN-ZHINESE-USING * @Link https://github.com/kotorijs/kotori * @Date 16:14:08 */ "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var api_exports = {}; __export(api_exports, { OnebotApi: () => OnebotApi, default: () => api_default }); module.exports = __toCommonJS(api_exports); var import_kotori_bot = require("kotori-bot"); class OnebotApi extends import_kotori_bot.Api { factory(callback) { return new Promise((resolve, reject) => { const timer = setTimeout(() => { reject(new import_kotori_bot.KotoriError("data response timeout")); this.adapter.ctx.off("literal_onebot_raw_data", handler); }, 10 * 1e3); const handler = (data) => { const result = callback(data); if (!result) return; this.adapter.ctx.off("literal_onebot_raw_data", handler); clearTimeout(timer); resolve(result); }; this.adapter.ctx.on("literal_onebot_raw_data", handler); }); } adapter; constructor(adapter) { super(adapter); this.adapter = adapter; } getSupportedEvents() { return [ "on_message", "on_message_delete", "on_request", "on_group_increase", "on_group_decrease", "on_group_ban", "on_group_admin", "onebot_poke" ]; } sendPrivateMsg(message, userId) { this.adapter.send("send_private_msg", { user_id: Number(userId), message: this.adapter.elements.decode(message), auto_escape: false }); return this.factory((data) => { if (Object.keys(data).length !== 1 || !("message_id" in data)) return null; this.adapter.ctx.emit("send", { api: this, messageId: String(data.message_id) }); return { messageId: String(data.message_id), time: Date.now() }; }); } /** * @description: 发送私聊消息 * @param message 要发送的内容 * @param groupId 群号 */ sendGroupMsg(message, groupId) { this.adapter.send("send_group_msg", { group_id: Number(groupId), message: this.adapter.elements.decode(message), auto_escape: false }); return this.factory((data) => { if (Object.keys(data).length !== 1 || !("message_id" in data)) return null; this.adapter.ctx.emit("send", { api: this, messageId: String(data.message_id) }); return { messageId: String(data.message_id), time: Date.now() }; }); } /** * @description: 撤回消息 * @param messageId 消息id */ deleteMsg(messageId) { this.adapter.send("delete_msg", { messageId }); } getSelfInfo() { this.adapter.send("get_login_info"); return this.factory((data) => { if (Object.keys(data).length !== 2 || !("user_id" in data) || !("nickname" in data)) return null; return { userId: String(data.user_id), username: String(data.nickname), userDisplayname: String(data.nickname) }; }); } getUserInfo(userId) { this.adapter.send("get_stranger_info", { user_id: Number(userId) }); return this.factory((data) => { const result = import_kotori_bot.Tsu.Object({ user_Id: import_kotori_bot.Tsu.Number(), nickname: import_kotori_bot.Tsu.String(), sex: import_kotori_bot.Tsu.String(), qid: import_kotori_bot.Tsu.String() }).parseSafe(data); if (!result.value) return null; return { userId: result.data.user_Id.toString(), username: result.data.nickname, userDisplayname: result.data.nickname, userRemark: "" }; }); } getFriendList() { this.adapter.send("get_friend_list"); return this.factory((data) => { const result = import_kotori_bot.Tsu.Array( import_kotori_bot.Tsu.Object({ user_id: import_kotori_bot.Tsu.Number(), nickname: import_kotori_bot.Tsu.String(), remark: import_kotori_bot.Tsu.String() }) ).parseSafe(data); if (!result.value) return null; return result.data.map((item) => ({ userId: item.user_id.toString(), username: item.nickname, userDisplayname: item.nickname, userRemark: "" })); }); } getGroupInfo(groupId) { this.adapter.send("get_group_info", { group_id: Number(groupId) }); return this.factory((data) => { const result = import_kotori_bot.Tsu.Object({ group_id: import_kotori_bot.Tsu.Number(), group_name: import_kotori_bot.Tsu.String(), group_memo: import_kotori_bot.Tsu.String() }).parseSafe(data); if (!result.value) return null; return { groupId: result.data.group_id.toString(), groupName: result.data.group_name }; }); } getGroupList() { this.adapter.send("get_group_list"); return this.factory((data) => { const result = import_kotori_bot.Tsu.Array( import_kotori_bot.Tsu.Object({ group_id: import_kotori_bot.Tsu.Number(), group_name: import_kotori_bot.Tsu.String(), group_memo: import_kotori_bot.Tsu.String() }) ).parseSafe(data); if (!result.value) return null; return result.data.map((item) => ({ groupId: item.group_id.toString(), groupName: item.group_name })); }); } getGroupMemberInfo(groupId, userId) { this.adapter.send("get_group_member_info", { group_id: Number(groupId), user_id: Number(userId) }); return this.factory((data) => { const result = import_kotori_bot.Tsu.Object({ group_id: import_kotori_bot.Tsu.Number(), user_id: import_kotori_bot.Tsu.Number(), nickname: import_kotori_bot.Tsu.String(), card: import_kotori_bot.Tsu.String(), join_time: import_kotori_bot.Tsu.Number(), role: import_kotori_bot.Tsu.String() }).parseSafe(data); if (!result.value) return null; return { userId: result.data.user_id.toString(), username: result.data.nickname, userDisplayname: result.data.card }; }); } getGroupMemberList(groupId) { this.adapter.send("get_group_member_list", { group_id: Number(groupId) }); return this.factory((data) => { const result = import_kotori_bot.Tsu.Array( import_kotori_bot.Tsu.Object({ group_id: import_kotori_bot.Tsu.Number(), user_id: import_kotori_bot.Tsu.Number(), nickname: import_kotori_bot.Tsu.String(), card: import_kotori_bot.Tsu.String() }) ).parseSafe(data); if (!result.value) return null; return result.data.map((item) => ({ userId: item.user_id.toString(), username: item.nickname, userDisplayname: item.card })); }); } /** * @description: 设置群名 * @param groupId 群号 * @param groupName 新群名 */ setGroupName(groupId, groupName) { this.adapter.send("set_group_name", { group_id: Number(groupId), group_name: groupName }); } /** * @description: 退出群组 * @param groupId 群号 */ leaveGroup(groupId) { this.adapter.send("set_group_leave", { group_id: Number(groupId), is_dismiss: false }); } /** * @description: 设置群头像 * @param groupId 群号 * @param image 图片路径 */ setGroupAvatar(groupId, image) { this.adapter.send("set_group_portrait", { group_id: Number(groupId), file: image, cache: false }); } /** * @description: 设置群管理员 * @param groupId 群号 * @param userId 要设置的管理员的QQ号 * @param enable true为设置,false取消,默认true */ setGroupAdmin(groupId, userId, enable = true) { this.adapter.send("set_group_admin", { group_id: Number(groupId), user_id: Number(userId), enable }); } /** * @description: 设置群名片(群备注) * @param groupId 群号 * @param userId 要设置的QQ号 * @param card 群名片内容,不填或空字符串表示删除群名片 */ setGroupCard(groupId, userId, card) { this.adapter.send("set_group_card", { group_id: Number(groupId), user_id: Number(userId), card }); } /** * @description: 群禁言 * @param groupId 群号 * @param userId 要禁言的QQ号,不填则为群禁言 * @param time 禁言时长,单位秒,0表示取消禁言 */ setGroupBan(groupId, userId, time = 0) { this.adapter.send("set_group_ban", { group_id: Number(groupId), user_id: Number(userId), duration: time }); } setGroupWholeBan(groupId, enable = true) { this.adapter.send("set_group_whole_ban", { group_id: Number(groupId), enable }); } /** * @description: 发送群公告 * @param groupId 群号 * @param content 公告内容 * @param image 图片路径(可选) */ sendGroupNotice(groupId, content, image) { this.adapter.send("_send_group_notice", { group_id: Number(groupId), content, image }); } /** * @description: 群组踢人 * @param groupId 群号 * @param userId 要踢的QQ号 */ setGroupKick(groupId, userId) { this.adapter.send("set_group_kick", { group_id: Number(groupId), user_id: Number(userId), reject_add_request: false }); } } var api_default = OnebotApi; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { OnebotApi });