Skip to content

Commit

Permalink
fix: 按钮操作格式化
Browse files Browse the repository at this point in the history
  • Loading branch information
lc-cn committed Jan 18, 2024
1 parent 7fa9e2d commit 7af8bd7
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 15 deletions.
6 changes: 6 additions & 0 deletions src/bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -783,3 +783,9 @@ export namespace Bot {
export interface Config extends QQBot.Config {
}
}
export function defineConfig(config:Bot.Config){
return config
}
export function createBot(config:Bot.Config){
return new Bot(config)
}
10 changes: 9 additions & 1 deletion src/elements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,15 @@ export interface MessageElemMap {
/** 仅接收有效 */
url?: string
};
markdown: Dict
markdown: {
content:string
custom_template_id:never
params:never
}|{
custom_template_id:string
content:never
params:{key:string,values:string}[]
}
keyboard: {
id: string
}
Expand Down
14 changes: 8 additions & 6 deletions src/entries/sender.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,23 +71,23 @@ export class Sender {
case 'reply':
this.messagePayload.msg_id = elem.id
this.filePayload.msg_id = elem.id
this.brief += `<$reply,msg_id=${elem.id}>`
this.brief += `<reply,msg_id=${elem.id}>`
break;
case "at":
this.messagePayload.content += `<@${elem.user_id === 'all' ? 'everyone' : elem.user_id}>`
this.brief += `<$at,user=${elem.user_id === 'all' ? 'everyone' : elem.user_id}>`
this.brief += `<at,user=${elem.user_id === 'all' ? 'everyone' : elem.user_id}>`
break;
case 'link':
this.messagePayload.content += `<#${elem.channel_id}>`
this.brief += `<$link,channel=${elem.channel_id}>`
this.brief += `<link,channel=${elem.channel_id}>`
break;
case 'text':
this.messagePayload.content += elem.text
this.brief += elem.text
break;
case 'face':
this.messagePayload.content += `<emoji:${elem.id}>`
this.brief += `<$face,id=${elem.id}>`
this.brief += `<face,id=${elem.id}>`
break;
case 'image':
case 'audio':
Expand Down Expand Up @@ -115,21 +115,23 @@ export class Sender {
case 'markdown':
this.messagePayload.markdown = data
this.messagePayload.msg_type = 2
this.brief += `<#markdown,content=${elem.content}>`
this.brief += `<markdown,${elem.content?`content=${elem.content}`:`template_id=${elem.custom_template_id}`}>`
break;
case 'keyboard':
this.messagePayload.msg_type = 2
this.messagePayload.keyboard = data
this.messagePayload.bot_appid=this.bot.config.appid
break;
case 'button':
this.buttons.push(data)
this.brief += `<$button,data=${JSON.stringify(data)}>`
this.brief += `<button,data=${JSON.stringify(data)}>`
break;
case "ark":
case "embed":
if (this.baseUrl.startsWith('/v2')) break
this.messagePayload.msg_type = type === 'ark' ? 3 : 4
this.messagePayload[type] = data
this.brief += `<${type}>`
break;
}
}
Expand Down
18 changes: 16 additions & 2 deletions src/event/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export enum QQEvent {
GROUP_DEL_ROBOT = 'notice.group.decrease',
FRIEND_ADD = 'notice.friend.add',
FRIEND_DEL = 'notice.friend.del',
INTERACTION_CREATE = 'notice.action.create',
INTERACTION_CREATE = 'notice',
C2C_MESSAGE_CREATE = 'message.private',
GROUP_AT_MESSAGE_CREATE = 'message.group',
}
Expand All @@ -48,5 +48,19 @@ export interface EventMap {

'notice'(e: ActionNoticeEvent | Dict): void

'notice.action'(e: ActionNoticeEvent): void
'notice.private'(e: ActionNoticeEvent | Dict): void

'notice.private.action'(e: ActionNoticeEvent): void

'notice.group'(e: ActionNoticeEvent | Dict): void

'notice.group.action'(e: ActionNoticeEvent): void

'notice.direct'(e: ActionNoticeEvent | Dict): void

'notice.direct.action'(e: ActionNoticeEvent): void

'notice.guild'(e: ActionNoticeEvent | Dict): void

'notice.guild.action'(e: ActionNoticeEvent): void
}
62 changes: 56 additions & 6 deletions src/event/notice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {EventParser} from "@/event/index";
export class ActionNoticeEvent {
notice_id: string
notice_type: string
sub_type:"friend"|'group'|'direct'|'guild'
guild_id?: string
channel_id?: string
group_id?: string
Expand All @@ -14,11 +15,8 @@ export class ActionNoticeEvent {
constructor(public bot: Bot, payload: Dict) {
this.notice_id = payload.id
this.notice_type = 'action'
this.guild_id = payload.guild_id
this.channel_id = payload.channel_id
this.group_id = payload.group_openid
this.operator_id = this.group_id ? payload.group_member_openid : payload.user_openid
this.data = payload.data
bot.emit('notice.action',this)
}

/**
Expand All @@ -31,7 +29,50 @@ export class ActionNoticeEvent {
return this.bot.replyAction(this.notice_id,code)
}
}

export class PrivateActionNoticeEvent extends ActionNoticeEvent {
operator_id:string
sub_type:'friend'='friend'
constructor(public bot: Bot, payload: Dict) {
super(bot, payload)
this.operator_id = payload.user_openid
bot.emit(`notice.action.${this.sub_type}`,this)
}
}
export class GroupActionNoticeEvent extends ActionNoticeEvent {
group_id:string
operator_id:string
sub_type:'group'='group'
constructor(bot: Bot, payload: Dict) {
super(bot, payload)
this.group_id = payload.group_openid
this.operator_id = payload.group_member_openid
bot.emit(`notice.action.${this.sub_type}`,this)
}
}
export class DirectActionNoticeEvent extends ActionNoticeEvent {
guild_id:string
operator_id:string
sub_type:'direct'='direct'
constructor(bot: Bot, payload: Dict) {
super(bot, payload)
this.guild_id = payload.guild_id
this.operator_id = payload.user_openid
bot.emit(`notice.action.${this.sub_type}`,this)
}
}
export class GuildActionNoticeEvent extends ActionNoticeEvent {
guild_id:string
channel_id:string
operator_id:string
sub_type:'guild'='guild'
constructor(bot: Bot, payload: Dict) {
super(bot, payload)
this.guild_id = payload.guild_id
this.channel_id = payload.channel_id
this.operator_id = payload.data.user_openid
bot.emit(`notice.action.${this.sub_type}`,this)
}
}
export namespace ActionNoticeEvent {
export type ReplyCode=0|1|2|3|4|5
export type ActionData = {
Expand All @@ -42,6 +83,15 @@ export namespace ActionNoticeEvent {
message_id: string
}
export const parse: EventParser = function (this: Bot, event: string, payload) {
return new ActionNoticeEvent(this, payload)
switch (payload.scene) {
case "c2c":
return new PrivateActionNoticeEvent(this, payload)
case "group":
return new GroupActionNoticeEvent(this, payload)
case "direct":
return new DirectActionNoticeEvent(this, payload)
case "guild":
return new GuildActionNoticeEvent(this, payload)
}
}
}

0 comments on commit 7af8bd7

Please sign in to comment.