Skip to content

Commit e30d5a5

Browse files
committed
adding events, (1/inf)
1 parent 87e340c commit e30d5a5

File tree

12 files changed

+550
-42
lines changed

12 files changed

+550
-42
lines changed

index.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,18 @@ import { InboundMessagingService } from './src/services/InboundMessagingService'
88
import { OutboundMessagingService } from './src/services/OutboundMessagingService';
99
import { Friend } from './src/objects/Friend';
1010
import { FriendListingResponse, GroupListingResponse, GroupMemberListingResponse } from './src/objects/ServerResponse';
11-
import { Group } from './src/objects/Message';
1211
import { GroupMember } from './src/objects/GroupMember';
1312
import { GroupManager } from './src/objects/GroupManager';
13+
import { Group } from './src/objects/Group';
14+
import { Event } from './src/objects/Event';
1415

1516
export interface MiraiClient extends EventEmitter {
1617
on(type: 'connect', cb: () => void): this;
18+
1719
on(type: 'message', cb: (msg: InboundMessage) => void): this;
20+
21+
on(type: 'event', cb: (ev: Event) => void): this;
22+
1823
on(type: 'error', cb: (err?: Error) => void): this;
1924
}
2025

@@ -37,8 +42,15 @@ export class MiraiClient extends EventEmitter {
3742
});
3843
if (config.connection.useWebsocket) {
3944
this.ws = new WebSocketService(config.connection, this.auth, this.out);
40-
this.ws.on('message', m => this.emit('message', m))
41-
.on('error', e => this.emit('error', e));
45+
this.ws.on('message', m => {
46+
this.emit('message', m);
47+
// TODO: make things more granular
48+
}).on('event', e => {
49+
this.emit('event', e);
50+
// TODO: ditto
51+
}).on('error', e => {
52+
this.emit('error', e);
53+
});
4254
} else {
4355
this.inbound = new InboundMessagingService(config.connection, this.auth, this.out, this.http);
4456
this.inbound.on('message', m => this.emit('message', m))
@@ -100,11 +112,17 @@ export class MiraiClient extends EventEmitter {
100112
* 获取群管理工具
101113
*
102114
* @param {number} groupId 群号
115+
* @since 0.1.4
103116
*/
104117
public getGroupManager(groupId: number): GroupManager {
105118
return new GroupManager(groupId, this.http, this.auth);
106119
}
107120

121+
/**
122+
* 停止服务
123+
*
124+
* @since 0.0.1
125+
*/
108126
public close() {
109127
this.ws?.close();
110128
this.inbound?.close();
@@ -120,7 +138,7 @@ export class MiraiClient extends EventEmitter {
120138

121139
/* Re-exporting necessary stuff */
122140

123-
export { Config, InboundMessage, Friend, GroupManager };
141+
export { Config, InboundMessage, Friend, GroupManager, Group, GroupMember, Event };
124142
export * as Message from './src/objects/Message';
125143
export { OutboundMessageChain } from './src/objects/OutboundMessageChain';
126144
export { StatusCode } from './src/objects/StatusCode';

src/objects/Event.ts

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
import { Group } from './Group';
2+
import { GroupPermission } from './GroupPermission';
3+
4+
/**
5+
* 事件类型
6+
*
7+
* @enum {string}
8+
*/
9+
export enum EventType {
10+
BOT_ONLINE = 'BotOnlineEvent',
11+
BOT_OFFLINE = 'BotOfflineEventActive',
12+
BOT_OFFLINE_FORCED = 'BotOfflineEventForce',
13+
BOT_OFFLINE_DISCONNECTED = 'BotOfflineEventDropped',
14+
BOT_RELOGIN = 'BotReloginEvent',
15+
BOT_PERMISSION_CHANGED = 'BotGroupPermissionChangeEvent',
16+
BOT_MUTED = 'BotMuteEvent',
17+
BOT_UNMUTED = 'BotUnmuteEvent',
18+
BOT_GROUP_JOINED = 'BotJoinGroupEvent',
19+
BOT_GROUP_PARTED = 'BotLeaveEventActive',
20+
BOT_GROUP_KICKED = 'BotLeaveEventKick',
21+
22+
GROUP_MESSAGE_RECALL = 'GroupRecallEvent',
23+
GROUP_MESSAGE_REVOKE = 'GroupRecallEvent',
24+
FRIEND_MESSAGE_RECALL = 'FriendRecallEvent',
25+
FRIEND_MESSAGE_REVOKE = 'FriendRecallEvent',
26+
27+
GROUP_NAMED_CHANGED = 'GroupNameChangeEvent',
28+
GROUP_ANNOUNCEMENT_CHANGED = 'GroupEntranceAnnouncementChangeEvent',
29+
GROUP_MUTE_CHANGED = 'GroupMuteAllEvent',
30+
GROUP_ANONYMOUS_CHAT_POLICY_CHANGED = 'GroupAllowAnonymousChatEvent',
31+
GROUP_CONFESS_TALK_POLICY_CHANGED = 'GroupAllowConfessTalkEvent',
32+
GROUP_INVITE_POLICY_CHANGED = 'GroupAllowMemberInviteEvent',
33+
34+
GROUP_MEMBER_JOINED = 'MemberJoinEvent',
35+
GROUP_MEMBER_KICKED = 'MemberLeaveEventKick',
36+
GROUP_MEMBER_PARTED = 'MemberLeaveEventQuit',
37+
GROUP_MEMBER_RENAMED = 'MemberCardChangeEvent',
38+
GROUP_MEMBER_TITLE_CHANGED = 'MemberSpecialTitleChangeEvent',
39+
GROUP_MEMBER_PERMISSION_CHANGED = 'MemberPermissionChangeEvent',
40+
GROUP_MEMBER_MUTED = 'MemberMuteEvent',
41+
GROUP_MEMBER_UNMUTED = 'MemberUnmuteEvent',
42+
43+
FRIEND_REQUEST = 'NewFriendRequestEvent',
44+
GROUP_JOIN_REQUEST = 'MemberJoinRequestEvent',
45+
GROUP_INVITE_REQUEST = 'BotInvitedJoinGroupRequestEvent',
46+
47+
BOT_CONNECTIVITY_CHANGED = 'BotConnectivityChangedEvent'
48+
}
49+
50+
/**
51+
* 机器人连接状态
52+
*/
53+
export enum BotConnectivity {
54+
ONLINE = 'Online',
55+
OFFLINE = 'Offline',
56+
KICKED = 'Kicked',
57+
DISCONNECTED = 'Disconnected'
58+
}
59+
60+
/**
61+
* 事件发起者
62+
*/
63+
export interface Operator {
64+
id: number;
65+
memberName: string;
66+
permission: GroupPermission;
67+
group: Group;
68+
}
69+
70+
/**
71+
* 事件基类
72+
*/
73+
export interface Event {
74+
type: EventType;
75+
}
76+
77+
export interface BotConnectivityChangeEvent extends Event {
78+
type: EventType.BOT_CONNECTIVITY_CHANGED;
79+
qq: number;
80+
state: BotConnectivity;
81+
}
82+
83+
export interface BotConnectivityBaseEvent extends Event {
84+
qq: number;
85+
}
86+
87+
export interface BotOnlineEvent extends BotConnectivityBaseEvent {
88+
type: EventType.BOT_ONLINE;
89+
}
90+
91+
export interface BotOfflineEvent extends BotConnectivityBaseEvent {
92+
type: EventType.BOT_OFFLINE;
93+
}
94+
95+
export interface BotForcedOfflineEvent extends BotConnectivityBaseEvent {
96+
type: EventType.BOT_OFFLINE_FORCED;
97+
}
98+
99+
export interface BotDisconnectedOfflineEvent extends BotConnectivityBaseEvent {
100+
type: EventType.BOT_OFFLINE_DISCONNECTED;
101+
}
102+
103+
export interface BotReloginEvent extends BotConnectivityBaseEvent {
104+
type: EventType.BOT_RELOGIN;
105+
}
106+
107+
export interface BotPermissionChangedEvent extends Event {
108+
type: EventType.BOT_PERMISSION_CHANGED;
109+
origin: GroupPermission;
110+
current: GroupPermission;
111+
group: Group;
112+
}
113+
114+
export interface BotMutedEvent extends Event {
115+
type: EventType.BOT_MUTED;
116+
durationSeconds: number;
117+
operator: Operator;
118+
}
119+
120+
export interface BotUnmutedEvent extends Event {
121+
type: EventType.BOT_UNMUTED;
122+
operator: Operator;
123+
}
124+
125+
export interface BotGroupBaseEvent extends Event {
126+
type: EventType;
127+
group: Group;
128+
}
129+
130+
export interface BotJoinedGroupEvent extends BotGroupBaseEvent {
131+
type: EventType.BOT_GROUP_JOINED;
132+
}
133+
134+
export interface BotPartedGroupEvent extends BotGroupBaseEvent {
135+
type: EventType.BOT_GROUP_PARTED;
136+
}
137+
138+
export interface BotKickedFromGroupEvent extends BotGroupBaseEvent {
139+
type: EventType.BOT_GROUP_KICKED;
140+
}
141+
142+
export interface GroupMessageRevokedEvent extends Event {
143+
type: EventType.GROUP_MESSAGE_REVOKE;
144+
authorId: number;
145+
messageId: number;
146+
time: number;
147+
group: Group;
148+
operator: Operator;
149+
}
150+
151+
export interface FriendMessageRevokedEvent extends Event {
152+
type: EventType.FRIEND_MESSAGE_REVOKE;
153+
authorId: number;
154+
messageId: number;
155+
time: number;
156+
operator: number; // WTF
157+
}
158+
159+
export interface GroupPolicyChangedEvent extends Event {
160+
type: EventType;
161+
origin: any;
162+
current: any;
163+
group: Group;
164+
operator: Operator;
165+
}
166+
167+
export interface GroupStringPolicyChangedEvent extends GroupPolicyChangedEvent {
168+
origin: string;
169+
current: string;
170+
}
171+
172+
export interface GroupBinaryPolicyChangedEvent extends GroupPolicyChangedEvent {
173+
origin: boolean;
174+
current: boolean;
175+
}
176+
177+
export interface GroupNameChangedEvent extends GroupStringPolicyChangedEvent {
178+
type: EventType.GROUP_NAMED_CHANGED;
179+
}
180+
181+
export interface GroupAnnouncementChangedEvent extends GroupStringPolicyChangedEvent {
182+
type: EventType.GROUP_ANNOUNCEMENT_CHANGED;
183+
}
184+
185+
export interface GroupChatPolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
186+
type: EventType.GROUP_MUTE_CHANGED;
187+
}
188+
189+
export interface GroupAnonymousChatPolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
190+
type: EventType.GROUP_ANONYMOUS_CHAT_POLICY_CHANGED;
191+
}
192+
193+
export interface GroupConfessTalkPolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
194+
type: EventType.GROUP_CONFESS_TALK_POLICY_CHANGED;
195+
}
196+
197+
export interface GroupInvitePolicyChangedEvent extends GroupBinaryPolicyChangedEvent {
198+
type: EventType.GROUP_INVITE_POLICY_CHANGED;
199+
}
200+
201+
export interface GroupMemberBaseEvent extends Event {
202+
type: EventType;
203+
member: {
204+
id: number;
205+
memberName: string;
206+
permission: GroupPermission;
207+
group: Group;
208+
}
209+
}
210+
211+
export interface GroupMemberJoinedEvent extends GroupMemberBaseEvent {
212+
type: EventType.GROUP_MEMBER_JOINED;
213+
}
214+
215+
export interface GroupMemberKickedEvent extends GroupMemberBaseEvent {
216+
type: EventType.GROUP_MEMBER_KICKED;
217+
operator: Operator;
218+
}
219+
220+
export interface GroupMemberPartedEvent extends GroupMemberBaseEvent {
221+
type: EventType.GROUP_MEMBER_PARTED;
222+
}
223+
224+
export interface GroupMemberNameChangedEvent extends GroupMemberBaseEvent {
225+
type: EventType.GROUP_MEMBER_RENAMED;
226+
origin: string;
227+
current: string;
228+
operator: Operator;
229+
}
230+
231+
export interface GroupMemberTitleChangedEvent extends GroupMemberBaseEvent {
232+
type: EventType.GROUP_MEMBER_TITLE_CHANGED;
233+
origin: string;
234+
current: string;
235+
}
236+
237+
export interface GroupMemberPermissionChangedEvent extends GroupMemberBaseEvent {
238+
type: EventType.GROUP_MEMBER_PERMISSION_CHANGED;
239+
origin: GroupPermission;
240+
current: GroupPermission;
241+
}
242+
243+
export interface GroupMemberMutedEvent extends GroupMemberBaseEvent {
244+
type: EventType.GROUP_MEMBER_MUTED;
245+
durationSeconds: number;
246+
operator: Operator;
247+
}
248+
249+
export interface GroupMemberUnmutedEvent extends GroupMemberBaseEvent {
250+
type: EventType.GROUP_MEMBER_UNMUTED;
251+
operator: Operator;
252+
}

src/objects/Group.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { GroupPermission } from './GroupPermission';
2+
3+
/**
4+
* 群标识符
5+
*/
6+
export interface Group {
7+
/** 群号 */
8+
id: number;
9+
/** 群名 */
10+
name: string;
11+
/** 机器人的权限 */
12+
permission: GroupPermission;
13+
}

src/objects/GroupManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class GroupManager {
7272
sessionKey: token,
7373
target: this.groupId,
7474
memberId: id,
75-
msg: msg
75+
msg: msg,
7676
}));
7777
}
7878

src/objects/GroupPermission.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* 群成员权限
3+
*
4+
* @enum {string}
5+
* @readonly
6+
*/
7+
export enum GroupPermission {
8+
/** 群员 */
9+
MEMBER = 'MEMBER',
10+
/** 管理员 */
11+
ADMINISTRATOR = 'ADMINISTRATOR',
12+
/** 管理员 */
13+
ADMIN = 'ADMINISTRATOR',
14+
/** 群主 */
15+
OWNER = 'OWNER'
16+
}

src/objects/InboundMessage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export class InboundMessage {
7373
const mentionBlock: Mention = {
7474
type: MessageContentType.MENTION,
7575
target: sender.id,
76-
display: ''
76+
display: '',
7777
};
7878
chain.append(mentionBlock);
7979
}

0 commit comments

Comments
 (0)