brian_hassinger

software developer

Autoswitch avatars on turntable.fm

July 07, 2013

For those uninitiated, turntable.fm is an online chat room crossed with internet radio. Up to 5 DJs are allowed to select songs from their carefully crafted playlists and play them for the room earning DJ points. Each user is represented by an avatar, many of which are unlocked in tiers by the points.

After unlocking a few avatars, one was not enough. I wondered if it was possible to be every avatar. With a little tinkering and reading other turntable plugins, I made a userscript/extension to constantly switch avatars. However it is very resource heavy.

This function is the heart of this gist.

ttplugin.start = function() {
  console.log('Avatar switcher started!');

  var userid = turntable.user.id;
  var auth = turntable.user.auth;
  //var avatars = [1,2,3,4,5,6,7,8]; // people
  //var avatars = [9,10,11,12,13,14,15,16,17];  // dolls
  var avatars = [18,19,121];  //cats
  var index = 0

  ttplugin.iv = setTimeout(function random() {
    index = (index + 1) % avatars.length;
    var cache = Date.now();
    var avatar = avatars[index];
    var avatar_url = 'http://turntable.fm/api/user.set_avatar?'
                    + 'avatarid='+avatar
                    + '&userid='+userid
                    + '&userauth='+auth
                    + '&client=web&decache='+cache;
    $.get(avatar_url, function(e){
      ttplugin.iv = setTimeout(random, ttplugin.speed);
    })
  }, ttplugin.speed);
}

To change avatars the turntable api will issue a specially formed GET request. This is easy to recreate, and from there trigger every 15 seconds. I’ve used lower intervals successfully, this one seems reasonable though. I did lower it to 250ms at one point. This did not make my browser happy, and other people in the room noticed some problems. One person reported their computer locking up for 6 full minutes.