请求编写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的请求频次限制,避免被封禁
使用注意事项
- 所有标注"你的XXX"的位置,替换为你从Twitter开发者平台获取的真实凭证
- 运行代码后Bot会持续监听请求,本地运行需保持终端开启,也可部署到云服务器长期运行
- 可修改关键词(比如改成"flip a coin")适配不同请求语句
内容的提问来源于stack exchange,提问作者pyhtoncoder
相关产品推荐
相关产品推荐

