mirror of
https://github.com/evennia/evennia.git
synced 2026-03-17 21:36:30 +01:00
86 lines
No EOL
3.2 KiB
Markdown
86 lines
No EOL
3.2 KiB
Markdown
# 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 |