2017-11-26 01:14:02 +00:00
const nmv = require ( '../dist/index' ) ;
2017-11-21 15:09:26 +00:00
const loginParameters = new nmv . LoginParameters ( ) ;
const parameters = require ( './loginParameters.json' ) ;
loginParameters . firstName = parameters . firstName ;
loginParameters . lastName = parameters . lastName ;
loginParameters . password = parameters . password ;
loginParameters . start = "last" ;
2017-12-14 02:06:28 +00:00
//const options = nmv.BotOptionFlags.None;
// If you don't intend to use the object store (i.e you have no interest in inworld objects, textures, etc,
// using ObjectStoreLite will drastically reduce the footprint
//
2017-12-14 02:18:50 +00:00
const options = nmv . BotOptionFlags . LiteObjectStore | nmv . BotOptionFlags . StoreMyAttachmentsOnly ;
2017-12-14 02:06:28 +00:00
const bot = new nmv . Bot ( loginParameters , options ) ;
2017-11-21 15:09:26 +00:00
2017-12-14 01:29:21 +00:00
let isConnected = false ;
2017-11-26 03:10:54 +00:00
2017-12-14 01:21:18 +00:00
const master = 'd1cd5b71-6209-4595-9bf0-771bf689ce00' ;
bot . clientEvents . onLure . subscribe ( ( lureEvent ) =>
2017-11-21 15:09:26 +00:00
{
2017-12-14 01:21:18 +00:00
bot . clientCommands . grid . getRegionMapInfo ( lureEvent . gridX , lureEvent . gridY ) . then ( ( regionInfo ) =>
2017-11-30 04:11:59 +00:00
{
2017-12-14 01:21:18 +00:00
if ( lureEvent . from . toString ( ) === master )
2017-11-30 04:11:59 +00:00
{
2017-12-14 01:21:18 +00:00
console . log ( 'Accepting teleport lure to ' + regionInfo . name + ' (' + regionInfo . avatars . length + ' avatar' + ( ( regionInfo . avatars . length === 1 ) ? '' : 's' ) + ' present) from ' + lureEvent . fromName + ' with message: ' + lureEvent . lureMessage ) ;
bot . clientCommands . teleport . acceptTeleport ( lureEvent ) ;
}
else
{
console . log ( 'Ignoring teleport lure to ' + regionInfo . name + ' (' + regionInfo . avatars . length + ' avatar' + ( ( regionInfo . avatars . length === 1 ) ? '' : 's' ) + ' present) from ' + lureEvent . fromName + ' with message: ' + lureEvent . lureMessage ) ;
}
} ) ;
} ) ;
2017-11-30 04:11:59 +00:00
2017-12-14 01:21:18 +00:00
bot . clientEvents . onInstantMessage . subscribe ( ( IMEvent ) =>
{
if ( IMEvent . source === nmv . ChatSourceType . Agent )
{
if ( ! ( IMEvent . flags & nmv . InstantMessageEventFlags . startTyping || IMEvent . flags & nmv . InstantMessageEventFlags . finishTyping ) )
2017-12-13 19:55:08 +00:00
{
2017-12-14 01:21:18 +00:00
bot . clientCommands . comms . typeInstantMessage ( IMEvent . from , 'Thanks for the message! This account is a scripted agent (bot), so cannot reply to your query. Sorry!' ) ;
}
}
} ) ;
2017-11-30 04:11:59 +00:00
2017-12-14 01:21:18 +00:00
bot . clientEvents . onDisconnected . subscribe ( ( DisconnectEvent ) =>
{
2017-12-14 01:29:21 +00:00
isConnected = false ;
2017-12-14 01:21:18 +00:00
console . log ( "Disconnected from simulator: " + DisconnectEvent . message ) ;
if ( ! DisconnectEvent . requested )
{
setTimeout ( ( ) =>
2017-12-13 19:55:08 +00:00
{
2017-12-14 01:21:18 +00:00
console . log ( "Reconnecting" ) ;
connect ( ) ;
} , 5000 )
}
} ) ;
2017-12-14 18:22:41 +00:00
bot . clientEvents . onGroupChat . subscribe ( ( GroupChatEvent ) =>
{
console . log ( "Group chat: " + GroupChatEvent . fromName + ': ' + GroupChatEvent . message ) ;
if ( GroupChatEvent . message === 'marco' )
{
console . log ( "Sending PONG" ) ;
bot . clientCommands . comms . sendGroupMessage ( GroupChatEvent . groupID , 'polo' ) ;
}
} ) ;
bot . clientEvents . onGroupInvite . subscribe ( ( GroupInviteEvent ) =>
{
console . log ( 'Group invite from ' + GroupInviteEvent . fromName + ': ' + GroupInviteEvent . message ) ;
//Resolve avatar key
bot . clientCommands . grid . name2Key ( GroupInviteEvent . fromName ) . then ( ( key ) =>
{
if ( key . toString ( ) === master )
{
console . log ( 'Accepting' ) ;
bot . clientCommands . comms . acceptGroupInvite ( GroupInviteEvent ) ;
}
else
{
console . log ( 'Unauthorised - rejecting' ) ;
bot . clientCommands . comms . rejectGroupInvite ( GroupInviteEvent ) ;
}
} ) . catch ( ( err ) =>
{
console . error ( err ) ;
console . log ( 'Unknown avatar - rejecting' ) ;
bot . clientCommands . comms . rejectGroupInvite ( GroupInviteEvent ) ;
} ) ;
} ) ;
2017-12-14 01:21:18 +00:00
function connect ( )
{
console . log ( "Logging in.." ) ;
bot . login ( ) . then ( ( response ) =>
{
console . log ( "Login complete" ) ;
2017-12-13 19:55:08 +00:00
2017-12-14 01:29:21 +00:00
//Establish circuit with region
2017-12-13 19:55:08 +00:00
return bot . connectToSim ( ) ;
} ) . then ( ( ) =>
{
2017-12-14 01:29:21 +00:00
isConnected = true ;
2017-12-13 19:55:08 +00:00
// Do some stuff
//bot.clientCommands.comms.typeLocalMessage('Never fear, I am here!', 2000);
//bot.clientCommands.group.sendGroupNotice('503e8ef6-e119-ff5e-2524-24f290dd3867', 'Test', 'testy testy test');
// When it's time to go home, call bot.close();
} ) . catch ( ( error ) =>
{
2017-12-14 01:29:21 +00:00
isConnected = false ;
2017-12-13 19:55:08 +00:00
console . log ( "Error:" ) ;
console . error ( error ) ;
setTimeout ( ( ) =>
{
connect ( ) ;
} , 5000 )
} ) ;
}
2017-11-21 15:09:26 +00:00
2017-12-13 19:55:08 +00:00
connect ( ) ;
2017-12-14 01:29:21 +00:00
function exitHandler ( options , err )
{
2017-12-14 18:22:41 +00:00
if ( err )
{
console . log ( err . stack ) ;
}
2017-12-14 01:29:21 +00:00
if ( isConnected )
{
console . log ( "Disconnecting" ) ;
bot . close ( ) . then ( ( ) =>
{
process . exit ( )
} ) ;
return ;
}
if ( options . exit )
{
process . exit ( ) ;
}
}
//do something when app is closing
process . on ( 'exit' , exitHandler . bind ( null , { } ) ) ;
//catches ctrl+c event
process . on ( 'SIGINT' , exitHandler . bind ( null , { exit : true } ) ) ;
// catches "kill pid" (for example: nodemon restart)
process . on ( 'SIGUSR1' , exitHandler . bind ( null , { exit : true } ) ) ;
process . on ( 'SIGUSR2' , exitHandler . bind ( null , { exit : true } ) ) ;
//catches uncaught exceptions
process . on ( 'uncaughtException' , exitHandler . bind ( null , { exit : true } ) ) ;