You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写Python版Twitter Bot掷币功能代码(含统计功能)

实现Twitter掷币Bot的完整Python代码

首先完成两个准备步骤:

  • 注册Twitter开发者账号,创建项目并获取API Key、API Secret Key、Access Token、Access Token Secret、Bearer Token这些凭证
  • 安装依赖库:执行 pip install tweepy

下面是完整可运行代码,包含掷币逻辑、数据记录功能及Twitter交互:

import tweepy
import random
import json
from datetime import datetime

# 替换成你的Twitter API凭证
API_KEY = "你的API_KEY"
API_SECRET = "你的API_SECRET"
ACCESS_TOKEN = "你的ACCESS_TOKEN"
ACCESS_TOKEN_SECRET = "你的ACCESS_TOKEN_SECRET"

# 保存掷币数据的文件路径
DATA_FILE = "coin_flip_data.json"

def load_coin_data():
    """加载已有掷币记录,文件不存在则初始化默认数据"""
    try:
        with open(DATA_FILE, "r") as f:
            return json.load(f)
    except FileNotFoundError:
        return {"total_flips": 0, "heads": 0, "tails": 0}

def save_coin_data(data):
    """将更新后的掷币记录保存到文件"""
    with open(DATA_FILE, "w") as f:
        json.dump(data, f, indent=2)

def handle_coin_flip(tweet, api):
    """处理掷币请求,执行掷币并回复用户"""
    coin_data = load_coin_data()
    
    # 执行随机掷币
    result = random.choice(["正面", "反面"])
    
    # 更新统计数据
    coin_data["total_flips"] += 1
    if result == "正面":
        coin_data["heads"] += 1
    else:
        coin_data["tails"] += 1
    
    save_coin_data(coin_data)
    
    # 计算比例(保留两位小数)
    heads_percent = (coin_data["heads"] / coin_data["total_flips"]) * 100 if coin_data["total_flips"] > 0 else 0
    tails_percent = (coin_data["tails"] / coin_data["total_flips"]) * 100 if coin_data["total_flips"] > 0 else 0
    
    # 构造回复内容
    reply_text = (
        f"@{tweet.user.screen_name} 掷币结果:{result} 🪙\n"
        f"累计统计:\n"
        f"总掷币次数:{coin_data['total_flips']}\n"
        f"正面次数:{coin_data['heads']} ({heads_percent:.2f}%)\n"
        f"反面次数:{coin_data['tails']} ({tails_percent:.2f}%)"
    )
    
    # 回复用户推文
    api.update_status(
        status=reply_text,
        in_reply_to_status_id=tweet.id,
        auto_populate_reply_metadata=True
    )

def main():
    # 初始化Twitter API客户端
    auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth, wait_on_rate_limit=True)
    
    # 验证连接
    try:
        user = api.verify_credentials()
        print(f"已成功登录为:@{user.screen_name}")
    except Exception as e:
        print(f"认证失败:{str(e)}")
        return
    
    # 监听提及自己的推文
    class CoinFlipStream(tweepy.StreamingClient):
        def on_tweet(self, tweet):
            # 排除自己发的推文,避免循环回复
            if tweet.author_id != user.id:
                if "掷币" in tweet.text:
                    print(f"收到@{tweet.author_id}的掷币请求,时间:{datetime.now()}")
                    handle_coin_flip(tweet, api)
    
    # 创建流对象并启动监听
    stream = CoinFlipStream(bearer_token="你的BEARER_TOKEN")
    # 添加监听规则:匹配包含"@你的Bot用户名"和"掷币"的推文
    stream.add_rules(tweepy.StreamRule("@你的Bot用户名 掷币"))
    stream.filter(tweet_fields=["author_id", "created_at"])

if __name__ == "__main__":
    main()

代码关键说明

  • 数据持久化:用JSON文件保存统计数据,避免程序重启后数据丢失,load_coin_data和save_coin_data负责读写操作
  • 掷币逻辑:random.choice实现公平随机选择,模拟真实掷币效果
  • Twitter监听:使用tweepy.StreamingClient实时监听提及Bot的请求,检测到关键词后自动执行掷币并回复
  • 速率限制处理:wait_on_rate_limit=True让API自动处理Twitter的请求频次限制,避免被封禁

使用注意事项

  1. 所有标注"你的XXX"的位置,替换为你从Twitter开发者平台获取的真实凭证
  2. 运行代码后Bot会持续监听请求,本地运行需保持终端开启,也可部署到云服务器长期运行
  3. 可修改关键词(比如改成"flip a coin")适配不同请求语句

内容的提问来源于stack exchange,提问作者pyhtoncoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:45:29