fix: BotFather fingerprint uses all-hex (00000000000000000b0ffa00e000000f)

Old fp contained non-hex chars (o,r) which got stripped by normFP,
causing whois lookup failure and bot detection to miss.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Siavash Sameni
2026-03-29 11:17:05 +04:00
parent 76ee2ab585
commit e0e747e005
4 changed files with 4 additions and 4 deletions

View File

@@ -5,7 +5,7 @@
use crate::state::AppState;
const BOTFATHER_FP: &str = "0000000000000000botfather00000000";
const BOTFATHER_FP: &str = "00000000000000000b0ffa00e000000f";
/// Check if a message is destined for BotFather and handle it.
/// Called from deliver_or_queue when the recipient is the BotFather fingerprint.

View File

@@ -60,7 +60,7 @@ async fn main() -> anyhow::Result<()> {
tracing::info!("Bot API enabled");
// Auto-create BotFather if it doesn't exist
let botfather_fp = "0000000000000000botfather00000000";
let botfather_fp = "00000000000000000b0ffa00e000000f";
let botfather_key = format!("bot_fp:{}", botfather_fp);
if state.db.tokens.get(botfather_key.as_bytes()).ok().flatten().is_none() {
let token = format!("botfather:{}", hex::encode(rand::random::<[u8; 16]>()));

View File

@@ -258,7 +258,7 @@ async fn register_bot(
// Only BotFather can register bots
// Require botfather_token field matching the stored BotFather token
if let Some(ref bf_token) = req.botfather_token {
let botfather_fp = "0000000000000000botfather00000000";
let botfather_fp = "00000000000000000b0ffa00e000000f";
let bf_key = format!("bot_fp:{}", botfather_fp);
let stored_token = state.db.tokens.get(bf_key.as_bytes())
.ok().flatten()

View File

@@ -174,7 +174,7 @@ impl AppState {
/// Returns true if delivered instantly (local or remote).
pub async fn deliver_or_queue(&self, to_fp: &str, message: &[u8]) -> bool {
// BotFather: intercept messages to @botfather
if self.bots_enabled && to_fp == "0000000000000000botfather00000000" {
if self.bots_enabled && to_fp == "00000000000000000b0ffa00e000000f" {
// Extract sender from message
if let Ok(msg) = serde_json::from_slice::<serde_json::Value>(message) {
let from = msg.get("from").and_then(|v| v.as_str()).unwrap_or("");