Wednesday, October 14, 2015

I want to sleep, but my mind won't shut up.

It's far too late, but my mind won't stop. And, as I have nothing better to do, and nowhere else to put it, I might as well cast my words into the void. Here's hoping this helps. I have no idea what I'm going to do with it, but apparently I need to get it down.

Trigger warning: 20 tonnes of concentrated, dehydrated shit, in a 10lb bag.

I. Am. Not. Okay.

It's a simple little lie. Someone asks "How are you?" and I reply "Oh, just fine". I'm really not. I'm a fucking mess, but I know they don't really want to hear it, and I really don't want to tell them. Telling them means acknowledging it, making it real. If I can just make everyone believe everything's fine, it'll all be perfect, right? And I'm good at lying, apparently.

I live in a house that looks like a bomb's hit it, and smells worse, and it's entirely my own fault. I am overweight and lazy and so apathetic about everything, because it doesn't make a difference. I have been living here for 6 years now, and am an illegal alien in this country. I can't work, I can't do anything, and if I get sick or hurt, I can't get any kind of coverage. The paperwork to get me legal has been filled out (at least, my half of it), but it's not been filed yet. Why? Apathy. It's a stupid amount of paperwork that has to be completed and verified, and it's not a guarantee of anything. And processing will take from 2-3 years. The fees have been paid, but wether they still have record of that or not is anybody's guess. And there's really no good reason for it, at all.

My wife, Deb, is working her ass off in retail once again, and her wage is almost good enough for us to survive on. Almost. We're not quite up to our eyebrows in debt, but they are calling, and we are occasionally having to rob Peter to pay Paul, as the saying goes. Deb is working hard, and stressed to the nines, exhausted and weary, physically and emotionally, every single day. She needs me to be her rock, that stalwart companion she can stand with and shelter from the world, and I can be that for her. I can give that impression, sure. She knows things aren't going well for me, she feels I might be a little bit depressed.

I spend every day distracting myself. I watch porn. I play videogames, badly, on easy, while sitting in an empty TeamSpeak server, and stream them to a Twitch channel that nobody watches. I write contributions to a bot and host it, just to get a little recognition. Some days it feels like I am a non-entity. If I was struck by lightning tomorrow, I can count on two hands, maybe three if I'm generous, the number of people who would notice and care. My family is 5,000 miles away, and I feel every inch of that distance some days. I have two or three friends. I act as someone else online, because I know nobody would want to know, would really care, about the real me underneath. I'm just not that interesting, not that important. Duller than dishwater.

I worry for Deb. Her health is not that good, but I can't do anything about that. She is stressing over money, as am I, and I can't do anything about that either. I can't bring money into the house to help with bills because I am currently unemployable. All I have that is in any way nice is a matter of charity or pity. I have $0 to my name, and that's not likely to change in the future. I want to be able to do something. Anything. I want to have a life, I want to make a difference. I want to be somebody, but right now all I'm doing is taking up space. I don't feel, I can't feel. Because if I do, I'm going to feel all of this shit, and it's going to overwhelm me, it's going to break me, and I can't be broken. I can't go anywhere, I can't do anything. I can't even leave, because we can't afford the funery expenses, and besides which I would never do that to Deb. I love her too much to put her through that.

And, most of all, it hurts. Deb is questioning if I actually care. I do. So very much. I care about all this shit. I want to do something, I *NEED* to do something, but I can't. Because it's too big, it's too much. I can't break it into small, bite-sized pieces and deal with it, because it's all intertwined, it's one solid lump. So I push it away, push it aside. I don't let it affect me, don't let it in.

So many things, so many ways, have I found to distract myself from dealing with this crap. And each time I've burned out. I'm burned out on life, and my brain won't let it go, won't let me sleep.

My shoes are too tight. But it doesn't matter, because I have forgotten how to dance.

And writing all this down, casting it into the ether like this? It does nothing. It doesn't help, it doesn't make a fucking ounce of difference, not a single god-damned thing. But at least my mind has quietened a little. Perhaps now I can sleep.

Thursday, July 23, 2015

Leg_Bot

Ghost_of_Leg_Bot is now dead.

Thanks to Twitch API changes, leg_bot will need an almost complete rewrite to continue working. As nobody's using the service anyway, I'm abandoning it. If you want to pick it up and work on it, the source is up on github, and if you'd like the database for the quotes or stats, drop me an e-mail.

The Ghost of Leg_Bot sent me here! What's the deal?

Well, since ufokraana elected to abandon leg_bot, and as there was evidently a need for it, I, Anaerin, have elected to update and host the bot, under the new name "Ghost_of_Leg_Bot". It's database is the final snapshot that ufokraana posted, so all your statistics and the like should still be in place.

That's cool... What about the Web API?

Well, as there's a new host, there's a new URL. currently, the web interface can be found at https://ghostoflegbot.tk - which, incidentally, is where the API can also be found for on-stream counters. The website there will be re-skinned (eventually), but for now it's a direct copy of the old site.
Update! The URL has been changed (and is reflected above). Old links will still work, however.

Isn't Leg_Bot open source?

I believe so. And I have had to make (more than) a few changes to it (to keep up-to-date with changes to the node.js library 'sequelize', as well as adding features detailed below). So I have done what any responsible open-source developer should do: Forked the repo, and am publishing my changes on GitHub.

So how are you hosting it?

The Ghost_of_Leg_Bot is currently residing on a Windows Azure Virtual machine. If you would like to donate towards it's continued upkeep, feel free to drop me a tip.

What new features are there? 

Yes, that's right, new features too!

Dynamic Counters

Counters are now dynamic - any mod can use the counter commands
  • !counter add <command> "<single>" "<plural>"
  • !counter remove <command>
to add and remove counters. Note, when a counter is removed, all the statistics logged for that counter are removed as well.
For example:

!counter add butt "butt" "butts"
!counter add warcrime "incident of friendly fire" "acts of incidental genocide"
!counter remove butt

Keep-Alive

The connection is now automatically set to keep alive, which should help with (some of) twitch's twitchiness.

Anti-Spam

The anti-spam system is now in place. If the bot is in your room, and set as mod, it'll do it's best to apply it's anti-spam rules. If anything matches, it'll timeout the user in question on a sliding scale: 4^numtimeouts. So, 1, 4, 16, 64... seconds.

Dynamic joining and parting

What's that? You want the bot in your channel? Well, there's no longer a need to hassle me - just join it's channel (ghost_of_leg_bot) and say !join. It will then join your room and start doing it's magic. If it's in your room, and you don't want it cluttering your chat with it's spam anymore, join it's channel and tell it !part, and it will leave.

Calendar Watching

On the fanstreamer calendar, but not gotten ghost_of_leg_bot in your channel? It's okay, ghost_of_leg_bot will now watch for twitch updates from any stream mentioned in the calendar. It won't join their channels, but it will be watching twitch, so you can be represented in it's !live report, and on the live page.

Statistics, by Game and by Channel

We keep track of a lot of stats. Now you can see what we keep track of, by game or by channel, at http://ghostoflegbot.tk/stats

Advice editing 

There's a lot of advice in the ghost_of_leg_bot, and not all of it is good advice. Help separate the wheat from the chaff, and vote on the advice ghost_of_leg_bot dispenses at http://ghostoflegbot.tk/advice

Barks

Got a message you find yourself often repeating? Have something you'd like said every so often? Try barks!

  • !bark add <command> "<message>" <Mod only (true or false)> [Interval (optional, in minutes)]
  • !bark remove <command>
For example:

!bark add promo "Check out my donation page at https://streamtip.com/t/anaerin" false
!bark add modsonly "This message can only be triggered by mods" true
!bark add motd "Message of the day, repeats every hour" false 60
!bark add butt "Mods are away, post butts!" false
!bark remove butt

Note: For technical reasons, editing your barks will re-set the timers of any intervals, as will ghost_of_leg_bot's connection derping for some reason.

Also, barks can now be triggered from the API: "http://ghostoflegbot.tk/api/channel/<channel name>/barks/<bark name>" Use this to give your "thanks/support/patreon etc" messages when you bring up your ending screen.

Whispers

Yes, Ghost_of_Leg_Bot now supports whispers. Error messages will be sent via whisper, and if the whisper fails for some reason it'll do it's best to find where you are and notice you there instead. To ensure whispers get through, make sure you follow the bot.

Some commands also work through whispers (those that aren't dependent on a channel), so mostly the basic ones, !nextfan and !nextlrr and !live.

Dice Rolling

Yeah, ghost_of_leg_bot does dice rolling too. Just type !roll and a D&D-style dice roll, and it will report the result to you. For example, "!roll 2d20" might get you the response "Rolled 2d20 and got 20 (1,19)"

Websockets

For those of you with an overlay, especially one in HTML (And if you don't have one, may I recommend this set of JavaScript building blocks as a starting point?) ghost_of_leg_bot now supports websockets. Simply connect a websocket to ws://ghostoflegbot.tk/ws/<channel> (For example, ws://ghostoflegbot.tk/ws/anaerin) and you will get notifications when the game changes and when stats change. For example:

{action: 'GameChanged', game: 'Creative'}
{action: 'StatChanged', stat: 'death', value: 20}
{action: 'GameChanged', game: ''}

This should help updates to the overlay come a lot faster, helping chat interactions somewhat.

Seen Tracking

Want to know when the last time someone spoke, or did something, in ghost_of_leg_bot's purview? Ask it!
!seen Anaerin

Quotes

You asked for it, so quotes are now available. (Currently disabled for cantwearhats and hpbraincase, as they have their own quote-supporting bots):
  • !quote
Returns a random quote.
  • !quote count
Returns the number of quotes available.
  • !quote <number>
Returns the specified quote. For example:
!quote 3
  • !quote bytext <search string>
Searches the quotes for something with "<Search String>" in it, and returns a random matching result. For example:
!quote bytext flying monkeys
  • !quote byauthor <author name>
Searches for quotes written by <author name> and returns a random result. For example:
!quote byauthor senstaku
  • !quote bygame <game name>
Searches for quotes that took place while <game name> was playing and returns a random result. For example:
!quote bygame Batman Arkham City
  • !quote bychannel <channel name>
Searches for quotes that too place in <channel name> and returns a random result. For example:
!quote bychannel admiralmemo
  • !quote bydate <date>
Searches for quotes logged on <date> and returns them. Note: Timezones are a thing. For example:
!quote bydate 2016-03-11
  • !quote add <quote> (author) [date]
MOD ONLY - Adds a quote to the database, returning the ID on a successful add. If the author is not specified, it is assumed to be the person logging the quote, if the date is not specified, it is assumed to be now.
For example:
!quote add This is how quotes work (Anaerin) [2016-03-11]
!quote add Not everything has to be specified [2016-03-12]
!quote add In fact, you can leave everything out.
  • !quote mod <ID> <quote> (author) [date]
MOD ONLY - Modifies quote # ID. If the Author or Date are not specified, they are not changed.
For example:
!quote mod 2 Now quote 2 has other things (Anaerin) [2016-03-11]
!quote mod 7 You can leave those other arguments off, too.
!quote mod 3 But you must have the ID and the quote text.
  • !quote del <id>
MOD ONLY - Removes quote #ID from the database. For example:
!quote del 6
  • !quote <search term>
Attempts to do an "intelligent" search, returning a random result where the text, author or game match the specified term. For example: !quote batman

AWS Support

Support for the new AWS cluster is in testing right now. Hopefully it's stable enough to use.