[+] Walk away and walk back

This commit is contained in:
2026-03-12 01:05:11 -04:00
parent b420252a40
commit 02af94a533
+47 -4
View File
@@ -174,10 +174,6 @@ async def treehole_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
remaining = int(TREEHOLE_COOLDOWN - (time.time() - last_time))
return await query.answer(f"发送太频繁了,请 {remaining} 秒后再试~", show_alert=True)
# Check if blocked
if db.is_blocked(user_id, channel):
return await query.answer("你已经被这个频道的主人屏蔽了哦~", show_alert=True)
# Check if channel has an owner
owner_id = db.get_channel_owner(channel)
if not owner_id:
@@ -265,11 +261,32 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
# Update rate limit
treehole_rate_limit[user_id] = time.time()
# Shadowban: if blocked, pretend the message was sent
if db.is_blocked(user_id, channel):
logger.info(f"🕳️ Shadowbanned message from {user_id} for {channel}")
return await update.message.reply_text("✅ 消息已匿名发送~")
# Get channel owner
owner_id = db.get_channel_owner(channel)
if not owner_id:
return await update.message.reply_text("这个频道还没有设置主人哦~")
# If owner opted out, silently drop (shadowban style)
if db.is_treehole_opted_out(owner_id):
logger.info(f"🕳️ Owner {owner_id} opted out, dropping message from {user_id} for {channel}")
return await update.message.reply_text("✅ 消息已匿名发送~")
# Send first-time notice to owner if not yet notified
if not db.is_treehole_notified(owner_id):
db.set_treehole_notified(owner_id)
try:
await context.bot.send_message(
chat_id=owner_id,
text="树洞对面传来消息了!(其实是匿名消息功能啦)\n\n如果不想要听到树洞消息的话可以说 /walkaway"
)
except Exception:
pass
# Send to owner anonymously
reply_btn = InlineKeyboardMarkup([
[InlineKeyboardButton("💬 回复", callback_data=f"reply:{user_id}:{channel}")],
@@ -301,9 +318,35 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("回复发送失败了...")
async def walkaway(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Handle /walkaway — owner opts out of tree hole messages."""
if update.message.chat.type != "private":
return
uid = update.message.from_user.id
logger.info(f"/walkaway from {user_info(update)}")
db.set_treehole_optout(uid, True)
await update.message.reply_text("你离开了树洞!如果想重新开始收到树洞消息的话请说 /walkback")
async def walkback(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Handle /walkback — owner opts back in to tree hole messages."""
if update.message.chat.type != "private":
return
uid = update.message.from_user.id
logger.info(f"/walkback from {user_info(update)}")
db.set_treehole_optout(uid, False)
await update.message.reply_text("欢迎回到树洞!你现在可以重新收到树洞消息了~")
# Add handlers
bot.add_handler(CommandHandler("start", start))
bot.add_handler(CommandHandler("leaf", plant))
bot.add_handler(CommandHandler("walkaway", walkaway))
bot.add_handler(CommandHandler("walkback", walkback))
bot.add_handler(CallbackQueryHandler(water_callback, pattern=r"^water:"))
bot.add_handler(CallbackQueryHandler(treehole_callback, pattern=r"^th:"))
bot.add_handler(CallbackQueryHandler(reply_callback, pattern=r"^reply:"))