Oddly enough I just happen to write one, it was a quick hack job as I wanted something in my PSM every time I logged in.
The PSM will be reverted to the original when signing out, if the quote is too long it will wait 5 seconds before getting a new one (so it wont bog down messenger). like i said it is a quick hack job. Feel free to change it. I know this isn't what you wanted per say but meh.
code:
var oldPSM;
function OnEvent_Initialize(MessengerStart){
try {
oldPSM = Messenger.MyPersonalMessage;
GetQuote();
} catch (err) {}
}
function OnEvent_SigninReady(sEmail) {
OnEvent_Initialize(true);
}
function OnEvent_Signout() {
Messenger.MyPersonalMessage = oldPSM;
}
function OnEvent_Uninitialize() {
OnEvent_Signout();
}
function GetQuote() {
var sUrl = 'http://www.quotedb.com/quote/quote.php?action=random_quote_rss&=&=&';
Interop.Call('wininet.dll', 'DeleteUrlCacheEntryW', sUrl);
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open('GET', sUrl, false);
xmlhttp.send();
var sString = xmlhttp.responseText;
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(sString);
var myNewPSM = xmlDoc.selectNodes('/rss/channel/item/description/text()')[0].text + ' - ' +xmlDoc.selectNodes('/rss/channel/item/title/text()')[0].text;
Debug.Trace(myNewPSM);
if (myNewPSM.length > 129) MsgPlus.AddTimer('x', 5000);
else Messenger.MyPersonalMessage = myNewPSM;
}
function OnEvent_Timer(sTimerId) {
GetQuote();
}