# Automatically Tweet game stats


This tutorial will create a simple script that will send a tweet to your already configured twitter account. Please see: [How to connect Evennia to Twitter](../Setup/Channels-to-Twitter.md) if you haven't already done so.

The script could be expanded to cover a variety of statistics you might wish to tweet about
regularly, from player deaths to how much currency is in the economy etc.

```python
# evennia/typeclasses/tweet_stats.py

import twitter
from random import randint
from django.conf import settings
from evennia import ObjectDB
from evennia.prototypes import prototypes
from evennia import logger
from evennia import DefaultScript

class TweetStats(DefaultScript):
    """
    This implements the tweeting of stats to a registered twitter account
    """

    # standard Script hooks 

    def at_script_creation(self):
        "Called when script is first created"

        self.key = "tweet_stats"
        self.desc = "Tweets interesting stats about the game"
        self.interval = 86400  # 1 day timeout
        self.start_delay = False
        
    def at_repeat(self):
        """
        This is called every self.interval seconds to 
        tweet interesting stats about the game.
        """
        
        api = twitter.Api(consumer_key='consumer_key',
          consumer_secret='consumer_secret',
          access_token_key='access_token_key',
          access_token_secret='access_token_secret')
        
        # Game Chars, Rooms, Objects taken from `stats` command
        nobjs = ObjectDB.objects.count()
        base_char_typeclass = settings.BASE_CHARACTER_TYPECLASS
        nchars = (              
            ObjectDB.objects
           .filter(db_typeclass_path=base_char_typeclass)
           .count()
        )
        nrooms =(
            ObjectDB.objects
            .filter(db_location__isnull=True)
            .exclude(db_typeclass_path=base_char_typeclass)
            .count()
        )
        nexits = (
            ObjectDB.objects
            .filter(db_location__isnull=False,
                    db_destination__isnull=False)
            .count()
        )
        nother = nobjs - nchars - nrooms - nexits
        tweet = f"Chars: {ncars}, Rooms: {nrooms}, Objects: {nother}"

        # post the tweet 
        try:
            response = api.PostUpdate(tweet)
        except:
            logger.log_trace(f"Tweet Error: When attempting to tweet {tweet}")
```

In the `at_script_creation` method, we configure the script to fire immediately (useful for testing)
and setup the delay (1 day) as well as script information seen when you use `@scripts`

In the `at_repeat` method (which is called immediately and then at interval seconds later) we setup
the Twitter API (just like in the initial configuration of twitter). We then show the number of Player Characters, Rooms and Other/Objects.

The [Scripts docs](../Components/Scripts.md) will show you how to add it as a Global script, however, for testing
it may be useful to start/stop it quickly from within the game.  Assuming that you create the file
as `mygame/typeclasses/tweet_stats.py` it can be started by using the following command

    script Here = tweet_stats.TweetStats