So I wrote a bot for Reddit…

My python has been a little rusty, so I decided to fill a small niche that I found on Reddit. It started off from spending way to much time on /r/minecraft, a subreddit I help moderate. Every time someone from Mojang would make a tweet, someone would post it to the subreddit. Another user and I had an informal competition of who could post the content of the tweet in the comments first. This had a few useful purposes for the community and served for a friendly pissing-contest between a few of us.

Enter tweet_poster. It has evolved a bit since the beginning where it would just post the tweet in the comments (well, technically, it never *just* did that, but I digress); it now has a small feature-set that is stretched about as far as I can go for a bot that fits as small of a niche that it does. From it’s wiki, it:

  • Finds all context for any given tweet, not just the tweet being replied to like twitter shows [ie: conversation threads].
  • Unshortens most url shorteners [now with more recursion!].
  • Turns @replies into links to the @user’s profile.
  • Turns #tags in to links to a search for that tag.
  • For user profile submissions, a comment-ified version will be posted along with the last tweet/conversation by the user.
  • Tries to ignore submissions that have the tweet’s text as the title.
  • Includes a big endian formatted timestamp for each tweet.
  • Includes a [Translate] button for easily translating tweets.
  • Tries to rehost images linked in tweets to imgur.

The first feature is one that has been there from the beginning and its my favorite. When you view a tweet that is in reply to someone on twitter you only see the tweet that it’s in reply to. With t_p, you’ll see the entire conversation for as long as it went. The next feature is another favorite and one that took a little work to get right (I am rusty at python, after-all). I use a web service to unshorten urls, but not just that, it does it recursively (I hate url shorteners being where they’re not needed!). The next two features (the linking of @users and #tags) is just replication of what twitter already does and weren’t really hard to implement.

Next up on the feature list is a somewhat controversial and misunderstood feature: comment-ified profile pages. Judging by the votes these comments receive, it’s not a favorite feature, but appreciated in some submissions. I think the main problem (and where it’s misunderstood) is that people still don’t entirely know how to create a direct link to the tweet they’re trying to share. I’ve gotten a few comments in t_p’s inbox stating that things were wrong and that it linked the wrong tweet, when in fact, the bot did exactly what it was supposed to. Oh well, I still get people that confuse its comment footer with a claim that I’m stating that they’re a bot (it says: [This comment was posted by a bot][FAQ][Did I get it wrong?]). You can’t expect everyone to be sharp on their toes.

I’m trying to figure out better heuristics for my ‘is the tweet in the submission title’ detection, but the current version works well enough. All I do is strip all the non-word characters, make everything lowercase, and do a check if the tweet’s text is in the title. Simple, but mostly effective.

The big endian dates aren’t anything special, though there is a small story behind the wording of that line in the feature list: I had originally called it ISO 8601 formatted (which it *is*), but some user messaged t_p and argued that I was wrong in calling it that. They wouldn’t give up, so I told them fine, I’ll just call it big endian (which is also correct). I’m a internet pendant, but there was nothing worth arguing in that one. The translate button was a small feature that I didn’t think I’d be able to add. I had originally dismissed it as I had read blog posts that the Google translate API was being shutdown (which it is in Dec.). T_p gets a lot of attention in /r/starcraft and in fact they give me the most support there. Every now and then, they get tweets that are posted in Korean (I wonder why? :) and a translate button was asked for a few times. Since /r/starcraft has been such a supportive community, I decided to give it a look and found a super simple solution: just throw the tweet’s text in a big-ass url and send it to Google translate.

Last on the feature list is the newest and probably the most involved feature. Twittpic and yfrog were small challenges to build a regex to yank the direct links to pictures. After I got those, I had to start work on interfacing with imgur’s API. There was a small quirk I had to work-around with httplib2, but it works and I don’t want to deal with it right now. The real problem I want to solve in that area is finding a way to yank images off of twitter’s newish picture hosting service. If anyone knows a way to do that, let me know :).

There were a few internal, mini-accomplishments that I figured out (a rewrite, adding a database, and learning some small tricks were among them), but those aren’t entirely worth writing about. I might try to write about them if I ever get around to rewriting them all.

Anyways, I just wanted to make a smallish write-up on my reddit bot. It makes more karma on reddit in a month than I do in a year, and I’m rather proud of it.

I’ll end this post with a picture of bot’s console just after I learned about terminal color codes (it’s a little different now):

color all the things!

Comments

Maybe I called it too early

I don’t know what combination of things got sound working yesterday, but all I know is I currently don’t have anything coming out of my speakers. Somewhere between uninstalling alsa, installing pulseaudio, and installing vlc some magic happened and I acquired sound. I’ve been pouring through logs but I can’t reproduce things or get consistent sound.

Here’s hoping I can figure it out before I go insane trying.

Comments

Sound over HDMI - WORKS!

I’ve never been able to get this working before. Lo and behold, all it took was a purge of all of alsa and installing pulseaudio. I’m so happy that I can use my mediacenter computer again. I was going nuts using my borrowed dvd player (let alone dvds).

Huzzah!

Comments

Adventures in virtual machines!

While I was working on building a new server setup, I decided to take notes of the installed size of Ubuntu after every major package I installed.

This is an x64 system. The installed size is determined via df -h after I clean the package cache

command-line install (from the minimal install iso): 728M (hot damn! I thought this was going to be smaller)

with virtualbox-ose: 899M (not bad, that’s still under 1GiB)

apache2, autofs, openssh-server, sshfs: 914M (yes! cli-only and I can get away running this all under a GiB!)

So I guess the smallest I can get comfortably get away with is a bit under a GiB. It’s a shame I use this box to watch movies on, and I need X. I won’t bore with any more details, at least until I get the final installed size figured out.

Comments

I’m going to try this out again

I haven’t tried to do this in a while, so I decided to nuke everything and start anew with tumblr. Instead of trying to have a theme, I’m just going to wing it and put whatever I feel like here. No restrictions for me that way. That could translate into me actually using this instead of losing motivation.

Here’s hoping I keep going.

Comments

I'm just aperson is powered by the I Could Live In Hope
Tumblr theme by Nonimage. Social icons by Komodo Media.