Please note: This page describes TimberBot as a project with a lot of forward momentum, which was accurate at the time it was written but does not necessarily reflect the current reality. See the project page for details. This page is provided mainly for archival purposes.

What is TimberBot?

TimberBot is a customizable and extensible chat bot that can be used with a variety of chat services. You can use TimberBot in your chat on Twitch, on Discord, on your IRC server, or even on Twitter.

Thanks to its plugin-based architecture, TimberBot can easily be customized to your needs. Choose the features you need from the over 30 plugins that are included with the installation, add third-party plugins for an even bigger feature set, or create your own for unlimited flexibility.

Curious to try it out? TimberBot is available as a free service right here on this website. If you prefer to have more control, you can download the code and run it on your own machine!

Why choose TimberBot?

Here are a few of the biggest reasons why TimberBot could be interesting to you.

Support for all sorts of chat services
Countless wonderful bots exist for Twitch. Other wonderful bots exist for Discord, and yet others for Hitbox and Twitter. But today's community builders frequently make use of several different chat services. With TimberBot, it is no longer necessary to learn and maintain new bots for every chat service you use. For example, migrating your TimberBot and all your valuable data from Twitch to Hitbox takes mere seconds. Or you can run your TimberBot on Twitch and Discord at the same time, and you can be sure that the necessary data will be shared between them.
Pick and choose exactly the functionality you need
With most chat bots, you get very little control over what functionality they include when you add them to your chat. TimberBot allows you to decide which features you need, and you can use the plugin system to have fine-grained control over what exactly the bot will do in your chat. Want a bot for jokes, raffles, memes, and lots of fun stuff? You can do that. Need a bot that simply sits in your chat and quietly tracks your viewer numbers, your stream times and your chat activity without ever saying a word? It's just a few clicks away.
Have full control over the bot's code
Maybe you're someone who likes when things just work after you click a few buttons: that's cool, we're happy to have you. But maybe you're someone who likes to have a thorough look at the software that powers your stuff. TimberBot's full Python source code is available to download (licensed under GPLv3), so please go ahead and check it out! You can even run your very own TimberBot from your own PC or server -- all you need is a modern version of Python. That way you know you will always have 100% control over your bot, and you can be sure that no update can ever ruin it. And even if we here suddenly turned evil, no one would be able to take it away from you, ever.


With TimberBot, (almost) everything is a plugin. Typical bot functions are split apart and can be enabled and disabled as needed.

But what if you need your bot to do something that isn't included in any existing plugin? In that case you can always create your own. All you need is basic knowledge of Python (or someone else who knows Python and is willing to do the work for you) and you're pretty much good to go.

Python is an excellent language to deal with text, which makes it well-suited to chat bot functionality. Even if you have little programming experience, if you take a look at a simple TimberBot plugin you'll see just how easy it can be.

And you don't even need to take our word for it, because here's the full source code to a simple coin flip plugin:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from plugin_base import TimberBotPlugin

import random

class CoinflipPlugin(TimberBotPlugin):

    def provides_commands(self):
        return ['coinflip']

    def help_text(self):
        return {'coinflip': 'Flips a coin ("' + self.format_command('coinflip') + '"), throws a die ("' + self.format_command('coinflip', '6') + '") or makes a random selection ("' + self.format_command('coinflip', 'Red', 'Purple', 'White') + '").'}

    def command_read(self, user, argv, raw):
        if len(argv) == 1:
            coin_sides = ['Heads', 'Tails']
            self.reply(user, 'Your coin flip result: ' + random.choice(coin_sides))
        elif len(argv) == 2 and argv[1].isdigit():
            if int(argv[1]) >= 1:
                self.reply(user, 'Your die roll result: ' + str(random.choice(range(1, int(argv[1])))))
                self.reply(user, 'Sorry, can\'t roll a die with ' + argv[1] + ' sides.')
            # user supplied a list of possible outcomes
            self.reply(user, 'Your random result: ' + random.choice(argv[1:]))