Account for active group members

This commit is contained in:
Casper Warden
2017-12-19 17:58:25 +00:00
parent fbb997a774
commit 81f4258c04
29 changed files with 248 additions and 27 deletions

View File

@@ -5,5 +5,7 @@ lib/
tools/
example/
docs/
test/
.npmignore
dist/tests/
.npmignore
.gitignore
caspertech-node-metaverse-*.tgz

View File

@@ -17,7 +17,14 @@ export declare class Agent {
regionAccess: string;
agentAccess: string;
currentRegion: Region;
chatSessions: string[];
chatSessions: {
[key: string]: {
[key: string]: {
hasVoice: boolean;
isModerator: boolean;
};
};
};
controlFlags: ControlFlags;
openID: {
'token'?: string;
@@ -56,6 +63,7 @@ export declare class Agent {
agentUpdateTimer: number | null;
private clientEvents;
constructor(clientEvents: ClientEvents);
getSessionAgentCount(uuid: UUID): number;
addChatSession(uuid: UUID): void;
hasChatSession(uuid: UUID): boolean;
setCurrentRegion(region: Region): void;

33
dist/classes/Agent.js vendored
View File

@@ -21,7 +21,7 @@ const Utils_1 = require("./Utils");
class Agent {
constructor(clientEvents) {
this.localID = 0;
this.chatSessions = [];
this.chatSessions = {};
this.controlFlags = 0;
this.openID = {};
this.buddyList = [];
@@ -31,16 +31,41 @@ class Agent {
this.agentUpdateTimer = null;
this.inventory = new Inventory_1.Inventory(clientEvents);
this.clientEvents = clientEvents;
this.clientEvents.onGroupChatAgentListUpdate.subscribe((event) => {
const str = event.groupID.toString();
if (this.chatSessions[str] === undefined) {
this.chatSessions[str] = {};
}
const agent = event.agentID.toString();
if (event.entered) {
this.chatSessions[str][agent] = {
hasVoice: event.canVoiceChat,
isModerator: event.isModerator
};
}
else {
delete this.chatSessions[str][agent];
}
});
}
getSessionAgentCount(uuid) {
const str = uuid.toString();
if (this.chatSessions[str] === undefined) {
return 0;
}
else {
return Object.keys(this.chatSessions[str]).length;
}
}
addChatSession(uuid) {
const str = uuid.toString();
if (this.chatSessions.indexOf(str) === -1) {
this.chatSessions.push(str);
if (this.chatSessions[str] === undefined) {
this.chatSessions[str] = {};
}
}
hasChatSession(uuid) {
const str = uuid.toString();
if (this.chatSessions.indexOf(str) === -1) {
if (this.chatSessions[str] === undefined) {
return false;
}
return true;

File diff suppressed because one or more lines are too long

View File

@@ -8,6 +8,7 @@ import { FriendRequestEvent } from '../events/FriendRequestEvent';
import { DisconnectEvent } from '../events/DisconnectEvent';
import { GroupChatEvent } from '../events/GroupChatEvent';
import { GroupChatSessionJoinEvent } from '../events/GroupChatSessionJoinEvent';
import { GroupChatSessionAgentListEvent } from '../events/GroupChatSessionAgentListEvent';
export declare class ClientEvents {
onNearbyChat: Subject<ChatEvent>;
onInstantMessage: Subject<InstantMessageEvent>;
@@ -19,4 +20,5 @@ export declare class ClientEvents {
onCircuitLatency: Subject<number>;
onGroupChat: Subject<GroupChatEvent>;
onGroupChatSessionJoin: Subject<GroupChatSessionJoinEvent>;
onGroupChatAgentListUpdate: Subject<GroupChatSessionAgentListEvent>;
}

View File

@@ -13,6 +13,7 @@ class ClientEvents {
this.onCircuitLatency = new Subject_1.Subject();
this.onGroupChat = new Subject_1.Subject();
this.onGroupChatSessionJoin = new Subject_1.Subject();
this.onGroupChatAgentListUpdate = new Subject_1.Subject();
}
}
exports.ClientEvents = ClientEvents;

View File

@@ -1 +1 @@
{"version":3,"file":"ClientEvents.js","sourceRoot":"","sources":["../../lib/classes/ClientEvents.ts"],"names":[],"mappings":";;AAGA,0CAAqC;AAQrC;IAAA;QAEI,iBAAY,GAAuB,IAAI,iBAAO,EAAa,CAAC;QAC5D,qBAAgB,GAAiC,IAAI,iBAAO,EAAuB,CAAC;QACpF,kBAAa,GAA8B,IAAI,iBAAO,EAAoB,CAAC;QAC3E,oBAAe,GAAgC,IAAI,iBAAO,EAAsB,CAAC;QACjF,WAAM,GAAuB,IAAI,iBAAO,EAAa,CAAC;QACtD,oBAAe,GAA2B,IAAI,iBAAO,EAAiB,CAAC;QACvE,mBAAc,GAA8B,IAAI,iBAAO,EAAmB,CAAC;QAC3E,qBAAgB,GAAoB,IAAI,iBAAO,EAAU,CAAC;QAC1D,gBAAW,GAA4B,IAAI,iBAAO,EAAkB,CAAC;QACrE,2BAAsB,GAAuC,IAAI,iBAAO,EAA6B,CAAC;IAC1G,CAAC;CAAA;AAZD,oCAYC"}
{"version":3,"file":"ClientEvents.js","sourceRoot":"","sources":["../../lib/classes/ClientEvents.ts"],"names":[],"mappings":";;AAGA,0CAAqC;AASrC;IAAA;QAEI,iBAAY,GAAuB,IAAI,iBAAO,EAAa,CAAC;QAC5D,qBAAgB,GAAiC,IAAI,iBAAO,EAAuB,CAAC;QACpF,kBAAa,GAA8B,IAAI,iBAAO,EAAoB,CAAC;QAC3E,oBAAe,GAAgC,IAAI,iBAAO,EAAsB,CAAC;QACjF,WAAM,GAAuB,IAAI,iBAAO,EAAa,CAAC;QACtD,oBAAe,GAA2B,IAAI,iBAAO,EAAiB,CAAC;QACvE,mBAAc,GAA8B,IAAI,iBAAO,EAAmB,CAAC;QAC3E,qBAAgB,GAAoB,IAAI,iBAAO,EAAU,CAAC;QAC1D,gBAAW,GAA4B,IAAI,iBAAO,EAAkB,CAAC;QACrE,2BAAsB,GAAuC,IAAI,iBAAO,EAA6B,CAAC;QACtG,+BAA0B,GAA4C,IAAI,iBAAO,EAAkC,CAAC;IACxH,CAAC;CAAA;AAbD,oCAaC"}

View File

@@ -9,6 +9,7 @@ const TeleportEventType_1 = require("../enums/TeleportEventType");
const GroupChatEvent_1 = require("../events/GroupChatEvent");
const UUID_1 = require("./UUID");
const GroupChatSessionJoinEvent_1 = require("../events/GroupChatSessionJoinEvent");
const GroupChatSessionAgentListEvent_1 = require("../events/GroupChatSessionAgentListEvent");
class EventQueueClient {
constructor(agent, caps, clientEvents) {
this.done = false;
@@ -96,6 +97,26 @@ class EventQueueClient {
}
case 'ChatterBoxSessionAgentListUpdates':
{
if (event['body']) {
if (event['body']['agent_updates']) {
Object.keys(event['body']['agent_updates']).forEach((agentUpdate) => {
const updObj = event['body']['agent_updates'][agentUpdate];
const gcsale = new GroupChatSessionAgentListEvent_1.GroupChatSessionAgentListEvent();
gcsale.agentID = new UUID_1.UUID(agentUpdate);
gcsale.groupID = new UUID_1.UUID(event['body']['session_id'].toString());
gcsale.canVoiceChat = false;
gcsale.isModerator = false;
gcsale.entered = (updObj['transition'] === 'ENTER');
if (updObj['can_voice_chat'] === true) {
gcsale.canVoiceChat = true;
}
if (updObj['is_moderator'] === true) {
gcsale.isModerator = true;
}
this.clientEvents.onGroupChatAgentListUpdate.next(gcsale);
});
}
}
break;
}
case 'TeleportFinish':

File diff suppressed because one or more lines are too long

View File

@@ -14,5 +14,5 @@ export declare class CommunicationsCommands extends CommandsBase {
typeInstantMessage(to: UUID | string, message: string, thinkingTime?: number, charactersPerSecond?: number): Promise<void>;
typeLocalMessage(message: string, thinkingTime?: number, charactersPerSecond?: number): Promise<void>;
startGroupChatSession(sessionID: UUID | string, message: string): Promise<void>;
sendGroupMessage(groupID: UUID | string, message: string): Promise<void>;
sendGroupMessage(groupID: UUID | string, message: string): Promise<number>;
}

View File

@@ -316,7 +316,9 @@ class CommunicationsCommands extends CommandsBase_1.CommandsBase {
EstateID: 0
};
const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable);
return circuit.waitForAck(sequenceNo, 10000);
return this.circuit.waitForAck(sequenceNo, 10000);
}).then(() => {
resolve(this.bot.clientCommands.group.getSessionAgentCount(groupID));
}).catch((err) => {
reject(err);
});

File diff suppressed because one or more lines are too long

View File

@@ -9,6 +9,7 @@ export declare class GroupCommands extends CommandsBase {
avatarID: UUID | string;
roleID: UUID | string | undefined;
}[]): Promise<void>;
getSessionAgentCount(sessionID: UUID | string): number;
sendGroupInvite(groupID: UUID | string, to: UUID | string, role: UUID | string | undefined): Promise<void>;
acceptGroupInvite(event: GroupInviteEvent): Promise<void>;
rejectGroupInvite(event: GroupInviteEvent): Promise<void>;

View File

@@ -77,6 +77,12 @@ class GroupCommands extends CommandsBase_1.CommandsBase {
const sequenceNo = this.circuit.sendMessage(igr, PacketFlags_1.PacketFlags.Reliable);
return this.circuit.waitForAck(sequenceNo, 10000);
}
getSessionAgentCount(sessionID) {
if (typeof sessionID === 'string') {
sessionID = new UUID_1.UUID(sessionID);
}
return this.agent.getSessionAgentCount(sessionID);
}
sendGroupInvite(groupID, to, role) {
const sendTo = [{
avatarID: to,

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
import { UUID } from '../classes/UUID';
export declare class GroupChatSessionAgentListEvent {
groupID: UUID;
agentID: UUID;
isModerator: boolean;
canVoiceChat: boolean;
entered: boolean;
}

View File

@@ -0,0 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class GroupChatSessionAgentListEvent {
}
exports.GroupChatSessionAgentListEvent = GroupChatSessionAgentListEvent;
//# sourceMappingURL=GroupChatSessionAgentListEvent.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"GroupChatSessionAgentListEvent.js","sourceRoot":"","sources":["../../lib/events/GroupChatSessionAgentListEvent.ts"],"names":[],"mappings":";;AAEA;CAOC;AAPD,wEAOC"}

11
dist/index.d.ts vendored
View File

@@ -10,4 +10,13 @@ import { ChatSourceType } from './enums/ChatSourceType';
import { BotOptionFlags } from './enums/BotOptionFlags';
import { UUID } from './classes/UUID';
import { Vector3 } from './classes/Vector3';
export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, InstantMessageEvent, InstantMessageEventFlags, ChatSourceType, BotOptionFlags, UUID, Vector3 };
import { ChatEvent } from './events/ChatEvent';
import { GroupInviteEvent } from './events/GroupInviteEvent';
import { FriendRequestEvent } from './events/FriendRequestEvent';
import { LureEvent } from './events/LureEvent';
import { TeleportEvent } from './events/TeleportEvent';
import { DisconnectEvent } from './events/DisconnectEvent';
import { GroupChatEvent } from './events/GroupChatEvent';
import { GroupChatSessionJoinEvent } from './events/GroupChatSessionJoinEvent';
import { GroupChatSessionAgentListEvent } from './events/GroupChatSessionAgentListEvent';
export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, InstantMessageEvent, InstantMessageEventFlags, ChatSourceType, BotOptionFlags, UUID, Vector3, ChatEvent, GroupInviteEvent, FriendRequestEvent, LureEvent, TeleportEvent, DisconnectEvent, GroupChatEvent, GroupChatSessionJoinEvent, GroupChatSessionAgentListEvent };

18
dist/index.js vendored
View File

@@ -24,4 +24,22 @@ const UUID_1 = require("./classes/UUID");
exports.UUID = UUID_1.UUID;
const Vector3_1 = require("./classes/Vector3");
exports.Vector3 = Vector3_1.Vector3;
const ChatEvent_1 = require("./events/ChatEvent");
exports.ChatEvent = ChatEvent_1.ChatEvent;
const GroupInviteEvent_1 = require("./events/GroupInviteEvent");
exports.GroupInviteEvent = GroupInviteEvent_1.GroupInviteEvent;
const FriendRequestEvent_1 = require("./events/FriendRequestEvent");
exports.FriendRequestEvent = FriendRequestEvent_1.FriendRequestEvent;
const LureEvent_1 = require("./events/LureEvent");
exports.LureEvent = LureEvent_1.LureEvent;
const TeleportEvent_1 = require("./events/TeleportEvent");
exports.TeleportEvent = TeleportEvent_1.TeleportEvent;
const DisconnectEvent_1 = require("./events/DisconnectEvent");
exports.DisconnectEvent = DisconnectEvent_1.DisconnectEvent;
const GroupChatEvent_1 = require("./events/GroupChatEvent");
exports.GroupChatEvent = GroupChatEvent_1.GroupChatEvent;
const GroupChatSessionJoinEvent_1 = require("./events/GroupChatSessionJoinEvent");
exports.GroupChatSessionJoinEvent = GroupChatSessionJoinEvent_1.GroupChatSessionJoinEvent;
const GroupChatSessionAgentListEvent_1 = require("./events/GroupChatSessionAgentListEvent");
exports.GroupChatSessionAgentListEvent = GroupChatSessionAgentListEvent_1.GroupChatSessionAgentListEvent;
//# sourceMappingURL=index.js.map

2
dist/index.js.map vendored
View File

@@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAmBtB,cAnBI,SAAG,CAmBJ;AAlBP,+DAA0D;AAmBtD,0BAnBI,iCAAe,CAmBJ;AAlBnB,yDAAoD;AAqBhD,uBArBI,2BAAY,CAqBJ;AApBhB,uCAAkC;AAqB9B,cArBI,SAAG,CAqBJ;AAhBP,iDAA4C;AAaxC,oBAbI,qBAAS,CAaJ;AAZb,mDAA8C;AAa1C,qBAbI,uBAAU,CAaJ;AAZd,+EAA0E;AAgBtE,mCAhBI,mDAAwB,CAgBJ;AAf5B,sEAAiE;AAc7D,8BAdI,yCAAmB,CAcJ;AAbvB,2DAAsD;AAelD,yBAfI,+BAAc,CAeJ;AAdlB,2DAAsD;AAelD,yBAfI,+BAAc,CAeJ;AAdlB,yCAAoC;AAehC,eAfI,WAAI,CAeJ;AAdR,+CAA0C;AAetC,kBAfI,iBAAO,CAeJ"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AA2BtB,cA3BI,SAAG,CA2BJ;AA1BP,+DAA0D;AA2BtD,0BA3BI,iCAAe,CA2BJ;AA1BnB,yDAAoD;AA6BhD,uBA7BI,2BAAY,CA6BJ;AA5BhB,uCAAkC;AA6B9B,cA7BI,SAAG,CA6BJ;AAxBP,iDAA4C;AAqBxC,oBArBI,qBAAS,CAqBJ;AApBb,mDAA8C;AAqB1C,qBArBI,uBAAU,CAqBJ;AApBd,+EAA0E;AAwBtE,mCAxBI,mDAAwB,CAwBJ;AAvB5B,sEAAiE;AAsB7D,8BAtBI,yCAAmB,CAsBJ;AArBvB,2DAAsD;AAuBlD,yBAvBI,+BAAc,CAuBJ;AAtBlB,2DAAsD;AAuBlD,yBAvBI,+BAAc,CAuBJ;AAtBlB,yCAAoC;AAuBhC,eAvBI,WAAI,CAuBJ;AAtBR,+CAA0C;AAuBtC,kBAvBI,iBAAO,CAuBJ;AAtBX,kDAA6C;AAuBzC,oBAvBI,qBAAS,CAuBJ;AAtBb,gEAA2D;AAuBvD,2BAvBI,mCAAgB,CAuBJ;AAtBpB,oEAA+D;AAuB3D,6BAvBI,uCAAkB,CAuBJ;AAtBtB,kDAA6C;AAuBzC,oBAvBI,qBAAS,CAuBJ;AAtBb,0DAAqD;AAuBjD,wBAvBI,6BAAa,CAuBJ;AAtBjB,8DAAyD;AAuBrD,0BAvBI,iCAAe,CAuBJ;AAtBnB,4DAAuD;AAuBnD,yBAvBI,+BAAc,CAuBJ;AAtBlB,kFAA6E;AAuBzE,oCAvBI,qDAAyB,CAuBJ;AAtB7B,4FAAuF;AAuBnF,yCAvBI,+DAA8B,CAuBJ"}

View File

@@ -74,7 +74,10 @@ bot.clientEvents.onGroupChat.subscribe((GroupChatEvent) =>
{
let ping = uuid.v4();
pings[ping] = Math.floor(new Date().getTime());
bot.clientCommands.comms.sendGroupMessage(GroupChatEvent.groupID, 'ping '+ping);
bot.clientCommands.comms.sendGroupMessage(GroupChatEvent.groupID, 'ping '+ping).then((memberCount) =>
{
console.log('Group message sent to ' + memberCount + ' members');
});
}
else if (GroupChatEvent.from.toString() === loginResponse.agent.agentID.toString())
{

View File

@@ -25,6 +25,7 @@ import {Utils} from './Utils';
import {AgentAnimationMessage} from './messages/AgentAnimation';
import {ClientEvents} from './ClientEvents';
import {IGameObject} from './interfaces/IGameObject';
import {GroupChatSessionAgentListEvent} from '../events/GroupChatSessionAgentListEvent';
export class Agent
{
@@ -36,7 +37,12 @@ export class Agent
regionAccess: string;
agentAccess: string;
currentRegion: Region;
chatSessions: string[] = [];
chatSessions: {[key: string]: {
[key: string]: {
hasVoice: boolean,
isModerator: boolean
}
}} = {};
controlFlags: ControlFlags = 0;
openID: {
'token'?: string,
@@ -79,21 +85,56 @@ export class Agent
{
this.inventory = new Inventory(clientEvents);
this.clientEvents = clientEvents;
this.clientEvents.onGroupChatAgentListUpdate.subscribe((event: GroupChatSessionAgentListEvent) =>
{
const str = event.groupID.toString();
if (this.chatSessions[str] === undefined)
{
this.chatSessions[str] = {};
}
const agent = event.agentID.toString();
if (event.entered)
{
this.chatSessions[str][agent] = {
hasVoice: event.canVoiceChat,
isModerator: event.isModerator
}
}
else
{
delete this.chatSessions[str][agent];
}
});
}
getSessionAgentCount(uuid: UUID): number
{
const str = uuid.toString();
if (this.chatSessions[str] === undefined)
{
return 0;
}
else
{
return Object.keys(this.chatSessions[str]).length;
}
}
addChatSession(uuid: UUID)
{
const str = uuid.toString();
if (this.chatSessions.indexOf(str) === -1)
if (this.chatSessions[str] === undefined)
{
this.chatSessions.push(str);
this.chatSessions[str] = {};
}
}
hasChatSession(uuid: UUID): boolean
{
const str = uuid.toString();
if (this.chatSessions.indexOf(str) === -1)
if (this.chatSessions[str] === undefined)
{
return false;
}

View File

@@ -8,6 +8,7 @@ import {FriendRequestEvent} from '../events/FriendRequestEvent';
import {DisconnectEvent} from '../events/DisconnectEvent';
import {GroupChatEvent} from '../events/GroupChatEvent';
import {GroupChatSessionJoinEvent} from '../events/GroupChatSessionJoinEvent';
import {GroupChatSessionAgentListEvent} from '../events/GroupChatSessionAgentListEvent';
export class ClientEvents
{
@@ -21,4 +22,5 @@ export class ClientEvents
onCircuitLatency: Subject<number> = new Subject<number>();
onGroupChat: Subject<GroupChatEvent> = new Subject<GroupChatEvent>();
onGroupChatSessionJoin: Subject<GroupChatSessionJoinEvent> = new Subject<GroupChatSessionJoinEvent>();
onGroupChatAgentListUpdate: Subject<GroupChatSessionAgentListEvent> = new Subject<GroupChatSessionAgentListEvent>();
}

View File

@@ -11,6 +11,7 @@ import {Utils} from './Utils';
import {UUID} from './UUID';
import {Agent} from './Agent';
import {GroupChatSessionJoinEvent} from '../events/GroupChatSessionJoinEvent';
import {GroupChatSessionAgentListEvent} from '../events/GroupChatSessionAgentListEvent';
export class EventQueueClient
{
@@ -310,7 +311,32 @@ export class EventQueueClient
}
case 'ChatterBoxSessionAgentListUpdates':
{
// TODO
if (event['body'])
{
if (event['body']['agent_updates'])
{
Object.keys(event['body']['agent_updates']).forEach((agentUpdate) =>
{
const updObj = event['body']['agent_updates'][agentUpdate];
const gcsale = new GroupChatSessionAgentListEvent();
gcsale.agentID = new UUID(agentUpdate);
gcsale.groupID = new UUID(event['body']['session_id'].toString());
gcsale.canVoiceChat = false;
gcsale.isModerator = false;
gcsale.entered = (updObj['transition'] === 'ENTER');
if (updObj['can_voice_chat'] === true)
{
gcsale.canVoiceChat = true;
}
if (updObj['is_moderator'] === true)
{
gcsale.isModerator = true;
}
this.clientEvents.onGroupChatAgentListUpdate.next(gcsale);
});
}
}
break;
}
case 'TeleportFinish':

View File

@@ -358,9 +358,9 @@ export class CommunicationsCommands extends CommandsBase
});
}
sendGroupMessage(groupID: UUID | string, message: string): Promise<void>
sendGroupMessage(groupID: UUID | string, message: string): Promise<number>
{
return new Promise<void>((resolve, reject) =>
return new Promise<number>((resolve, reject) =>
{
this.startGroupChatSession(groupID, message).then(() =>
{
@@ -393,7 +393,10 @@ export class CommunicationsCommands extends CommandsBase
EstateID: 0
};
const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable);
return circuit.waitForAck(sequenceNo, 10000);
return this.circuit.waitForAck(sequenceNo, 10000);
}).then(() =>
{
resolve(this.bot.clientCommands.group.getSessionAgentCount(groupID))
}).catch((err) =>
{
reject(err);

View File

@@ -98,6 +98,15 @@ export class GroupCommands extends CommandsBase
return this.circuit.waitForAck(sequenceNo, 10000);
}
getSessionAgentCount(sessionID: UUID | string): number
{
if (typeof sessionID === 'string')
{
sessionID = new UUID(sessionID);
}
return this.agent.getSessionAgentCount(sessionID);
}
sendGroupInvite(groupID: UUID | string, to: UUID | string, role: UUID | string | undefined): Promise<void>
{
const sendTo = [{

View File

@@ -0,0 +1,10 @@
import {UUID} from '../classes/UUID';
export class GroupChatSessionAgentListEvent
{
groupID: UUID;
agentID: UUID;
isModerator: boolean;
canVoiceChat: boolean;
entered: boolean;
}

View File

@@ -14,7 +14,15 @@ import {ChatSourceType} from './enums/ChatSourceType';
import {BotOptionFlags} from './enums/BotOptionFlags';
import {UUID} from './classes/UUID';
import {Vector3} from './classes/Vector3';
import {ChatEvent} from './events/ChatEvent';
import {GroupInviteEvent} from './events/GroupInviteEvent';
import {FriendRequestEvent} from './events/FriendRequestEvent';
import {LureEvent} from './events/LureEvent';
import {TeleportEvent} from './events/TeleportEvent';
import {DisconnectEvent} from './events/DisconnectEvent';
import {GroupChatEvent} from './events/GroupChatEvent';
import {GroupChatSessionJoinEvent} from './events/GroupChatSessionJoinEvent';
import {GroupChatSessionAgentListEvent} from './events/GroupChatSessionAgentListEvent';
export {
Bot,
@@ -28,5 +36,14 @@ export {
ChatSourceType,
BotOptionFlags,
UUID,
Vector3
Vector3,
ChatEvent,
GroupInviteEvent,
FriendRequestEvent,
LureEvent,
TeleportEvent,
DisconnectEvent,
GroupChatEvent,
GroupChatSessionJoinEvent,
GroupChatSessionAgentListEvent
};