[Closes #10] Implement group ban/unban. Also fix cap system to accept certain HTTP responses as valid states even with no valid LLSD body.

This commit is contained in:
Casper Warden
2019-12-31 14:11:37 +00:00
parent 2e7552a65a
commit 3982d67b7d
6 changed files with 167 additions and 52 deletions

View File

@@ -1,24 +1,23 @@
import {CommandsBase} from './CommandsBase';
import {UUID} from '../UUID';
import {InstantMessageDialog} from '../../enums/InstantMessageDialog';
import {Utils} from '../Utils';
import {PacketFlags} from '../../enums/PacketFlags';
import {ImprovedInstantMessageMessage} from '../messages/ImprovedInstantMessage';
import {Vector3} from '../Vector3';
import {InviteGroupRequestMessage} from '../messages/InviteGroupRequest';
import {GroupRole} from '../GroupRole';
import {GroupRoleDataRequestMessage} from '../messages/GroupRoleDataRequest';
import {Message} from '../../enums/Message';
import {Packet} from '../Packet';
import {GroupRoleDataReplyMessage} from '../messages/GroupRoleDataReply';
import {GroupMember} from '../GroupMember';
import {FilterResponse} from '../../enums/FilterResponse';
import { CommandsBase } from './CommandsBase';
import { UUID } from '../UUID';
import { InstantMessageDialog } from '../../enums/InstantMessageDialog';
import { Utils } from '../Utils';
import { PacketFlags } from '../../enums/PacketFlags';
import { ImprovedInstantMessageMessage } from '../messages/ImprovedInstantMessage';
import { Vector3 } from '../Vector3';
import { InviteGroupRequestMessage } from '../messages/InviteGroupRequest';
import { GroupRole } from '../GroupRole';
import { GroupRoleDataRequestMessage } from '../messages/GroupRoleDataRequest';
import { Message } from '../../enums/Message';
import { GroupRoleDataReplyMessage } from '../messages/GroupRoleDataReply';
import { GroupMember } from '../GroupMember';
import { FilterResponse } from '../../enums/FilterResponse';
import * as LLSD from '@caspertech/llsd';
import {GroupInviteEvent} from '../..';
import {EjectGroupMemberRequestMessage} from '../messages/EjectGroupMemberRequest';
import {GroupProfileRequestMessage} from '../messages/GroupProfileRequest';
import {GroupProfileReplyMessage} from '../messages/GroupProfileReply';
import {GroupProfileReplyEvent} from '../..';
import { GroupInviteEvent, GroupProfileReplyEvent } from '../..';
import { EjectGroupMemberRequestMessage } from '../messages/EjectGroupMemberRequest';
import { GroupProfileRequestMessage } from '../messages/GroupProfileRequest';
import { GroupProfileReplyMessage } from '../messages/GroupProfileReply';
import { GroupBanAction } from '../../enums/GroupBanAction';
export class GroupCommands extends CommandsBase
{
@@ -176,6 +175,50 @@ export class GroupCommands extends CommandsBase
return await circuit.waitForAck(sequenceNo, 10000);
}
async unbanMembers(groupID: UUID | string, avatars: UUID | string | string[] | UUID[])
{
this.banMembers(groupID, avatars, GroupBanAction.Unban);
}
async banMembers(groupID: UUID | string, avatars: UUID | string | string[] | UUID[], groupAction: GroupBanAction = GroupBanAction.Ban)
{
const listOfIDs: string[] = [];
if (Array.isArray(avatars))
{
for (const av of avatars)
{
if (typeof av === 'string')
{
listOfIDs.push(av);
}
else
{
listOfIDs.push(av.toString());
}
}
}
else if (typeof avatars === 'string')
{
listOfIDs.push(avatars);
}
else
{
listOfIDs.push(avatars.toString());
}
const requestData: any = {
'ban_action': groupAction,
'ban_ids': []
};
for (const id of listOfIDs)
{
requestData.ban_ids.push(new LLSD.UUID(id));
}
await this.currentRegion.caps.capsRequestXML(['GroupAPIv1', {'group_id': groupID.toString()}], requestData);
}
getMemberList(groupID: UUID | string): Promise<GroupMember[]>
{
return new Promise<GroupMember[]>((resolve, reject) =>