自动推送游戏统计数据到 Twitter

本教程将创建一个简单的脚本,该脚本会向您已配置的 Twitter 账户发送推文。如果您尚未完成,请参阅 如何将 Evennia 连接到 Twitter

该脚本可以扩展,以涵盖您希望定期推送的各种统计数据,从玩家死亡到经济中有多少货币等。

# 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):
    """
    实现将统计信息推送到注册的 Twitter 账户
    """

    # 标准脚本钩子 

    def at_script_creation(self):
        "脚本首次创建时调用"

        self.key = "tweet_stats"
        self.desc = "推送有关游戏的有趣统计数据"
        self.interval = 86400  # 1天超时
        self.start_delay = False
        
    def at_repeat(self):
        """
        每自定义的 self.interval 秒调用一次 
        推送有关游戏的有趣统计数据。
        """
        
        api = twitter.Api(consumer_key='consumer_key',
          consumer_secret='consumer_secret',
          access_token_key='access_token_key',
          access_token_secret='access_token_secret')
        
        # 从 `stats` 命令获取游戏角色、房间、对象
        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"角色数: {nchars}, 房间数: {nrooms}, 其他/对象数: {nother}"

        # 发布推文 
        try:
            response = api.PostUpdate(tweet)
        except:
            logger.log_trace(f"推文错误: 尝试推送 {tweet} 时出错")

at_script_creation 方法中,我们配置脚本以立即触发(对于测试很有用),并设置延迟(1 天)以及您在使用 @scripts 时看到的脚本信息。

at_repeat 方法中(第一次调用立即,然后在指定的时间间隔后再次调用),我们配置 Twitter API(就像在 Twitter 的初始配置中一样)。然后我们显示玩家角色、房间和其他对象的数量。

有关如何将其作为全局脚本添加的详细信息,请参阅 脚本文档,不过在测试时,您可能希望在游戏中快速启动/停止它。假设您将文件创建为 mygame/typeclasses/tweet_stats.py,可以使用以下命令启动它:

script Here = tweet_stats.TweetStats