2020-11-23 15:43:27 +00:00
import { ExampleBot } from '../ExampleBot' ;
import { InventoryFolder } from '../../lib/classes/InventoryFolder' ;
import { FolderType } from '../../lib/enums/FolderType' ;
import { InventoryItem } from '../../lib/classes/InventoryItem' ;
import { LLLindenText } from '../../lib/classes/LLLindenText' ;
import { AssetType } from '../../lib/enums/AssetType' ;
import { InventoryType } from '../../lib/enums/InventoryType' ;
import { PermissionMask } from '../../lib/enums/PermissionMask' ;
import { InventoryResponseEvent } from '../../lib/events/InventoryResponseEvent' ;
import { InventoryOfferedEvent } from '../../lib/events/InventoryOfferedEvent' ;
class Inventory extends ExampleBot
{
2021-09-22 15:34:53 +01:00
async onConnected ( ) : Promise < void >
2020-11-23 15:43:27 +00:00
{
this . bot . clientEvents . onInventoryOffered . subscribe ( this . onInventoryOffered . bind ( this ) ) ;
this . bot . clientEvents . onInventoryResponse . subscribe ( this . onInventoryResponse . bind ( this ) ) ;
// Get the root inventory folder
const rootFolder = this . bot . clientCommands . inventory . getInventoryRoot ( ) ;
// Populate the root folder
await rootFolder . populate ( false ) ;
const exampleFolderName = 'node-metaverse example' ;
const exampleNotecardName = 'Example Notecard' ;
2021-09-22 14:53:34 +01:00
const exampleScriptName = 'Example script' ;
2020-11-23 15:43:27 +00:00
let exampleFolder : InventoryFolder | undefined = undefined ;
for ( const childFolder of rootFolder . folders )
{
if ( childFolder . name === exampleFolderName )
{
exampleFolder = childFolder ;
await exampleFolder . populate ( false ) ;
break ;
}
}
// Our folder doesnt' seem to exist, so create it
if ( exampleFolder === undefined )
{
exampleFolder = await rootFolder . createFolder ( exampleFolderName , FolderType . None ) ;
}
// See if we've already made our test notecard to avoid clutter..
let exampleNotecard : InventoryItem | undefined = undefined ;
for ( const childItem of exampleFolder . items )
{
if ( childItem . name === exampleNotecardName )
{
exampleNotecard = childItem ;
break ;
}
}
// Create the notecard
if ( exampleNotecard === undefined )
{
const notecard = new LLLindenText ( ) ;
notecard . body = 'This is a notecard I made all by myself at ' + new Date ( ) . toString ( ) ;
exampleNotecard = await exampleFolder . uploadAsset ( AssetType . Notecard , InventoryType . Notecard , notecard . toAsset ( ) , exampleNotecardName , 'This is an example notecard' ) ;
}
// Set notecard to transfer only
exampleNotecard . permissions . nextOwnerMask = PermissionMask . Transfer | PermissionMask . Modify ;
await exampleNotecard . update ( ) ;
2021-09-22 14:53:34 +01:00
let exampleScript = exampleFolder . items . find ( f = > f . name === exampleScriptName ) ;
if ( exampleScript === undefined )
{
exampleScript = await exampleFolder . uploadAsset (
AssetType . LSLText ,
InventoryType . LSL ,
Buffer . from (
'default { touch_start(integer total_number) { llSay(0, "Hello, world!"); } } '
, 'utf-8'
) ,
'Script' ,
''
) ;
}
2020-11-23 15:43:27 +00:00
// Give the notecard to our owner
await this . bot . clientCommands . comms . giveInventory ( this . masterAvatar , exampleNotecard ) ;
// Enumerate library
const folders = this . bot . clientCommands . inventory . getLibraryRoot ( ) . getChildFolders ( ) ;
for ( const folder of folders )
{
await this . iterateFolder ( folder , '[ROOT]' ) ;
}
console . log ( 'Done iterating through library' ) ;
}
2021-09-22 15:34:53 +01:00
async onInventoryResponse ( response : InventoryResponseEvent ) : Promise < void >
2020-11-23 15:43:27 +00:00
{
if ( response . accepted )
{
console . log ( response . fromName + ' accepted your inventory offer' ) ;
}
else
{
console . log ( response . fromName + ' declined your inventory offer' ) ;
}
}
2021-09-22 15:34:53 +01:00
async iterateFolder ( folder : InventoryFolder , prefix : string ) : Promise < void >
2020-11-23 15:43:27 +00:00
{
console . log ( prefix + ' [' + folder . name + ']' ) ;
await folder . populate ( false ) ;
for ( const subFolder of folder . folders )
{
await this . iterateFolder ( subFolder , prefix + ' [' + folder . name + ']' ) ;
}
for ( const item of folder . items )
{
console . log ( prefix + ' [' + folder . name + ']' + ': ' + item . name ) ;
if ( item . name === 'anim SMOOTH' )
{
// Send this to our master av
}
}
}
2021-09-22 15:34:53 +01:00
async onInventoryOffered ( event : InventoryOfferedEvent ) : Promise < void >
2020-11-23 15:43:27 +00:00
{
if ( event . from . toString ( ) === this . masterAvatar )
{
console . log ( 'Accepting inventory offer from ' + event . fromName ) ;
this . bot . clientCommands . inventory . acceptInventoryOffer ( event ) . then ( ( ) = >
{
} ) ;
}
else
{
console . log ( 'Rejecting inventory offer from ' + event . fromName ) ;
this . bot . clientCommands . inventory . rejectInventoryOffer ( event ) . then ( ( ) = >
{
} ) ;
}
}
}
new Inventory ( ) . run ( ) . then ( ( ) = > { } ) . catch ( ( err ) = > { console . error ( err ) } ) ;