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:
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
use crate::state::AppState;
|
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.
|
/// Check if a message is destined for BotFather and handle it.
|
||||||
/// Called from deliver_or_queue when the recipient is the BotFather fingerprint.
|
/// Called from deliver_or_queue when the recipient is the BotFather fingerprint.
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
tracing::info!("Bot API enabled");
|
tracing::info!("Bot API enabled");
|
||||||
|
|
||||||
// Auto-create BotFather if it doesn't exist
|
// Auto-create BotFather if it doesn't exist
|
||||||
let botfather_fp = "0000000000000000botfather00000000";
|
let botfather_fp = "00000000000000000b0ffa00e000000f";
|
||||||
let botfather_key = format!("bot_fp:{}", botfather_fp);
|
let botfather_key = format!("bot_fp:{}", botfather_fp);
|
||||||
if state.db.tokens.get(botfather_key.as_bytes()).ok().flatten().is_none() {
|
if state.db.tokens.get(botfather_key.as_bytes()).ok().flatten().is_none() {
|
||||||
let token = format!("botfather:{}", hex::encode(rand::random::<[u8; 16]>()));
|
let token = format!("botfather:{}", hex::encode(rand::random::<[u8; 16]>()));
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ async fn register_bot(
|
|||||||
// Only BotFather can register bots
|
// Only BotFather can register bots
|
||||||
// Require botfather_token field matching the stored BotFather token
|
// Require botfather_token field matching the stored BotFather token
|
||||||
if let Some(ref bf_token) = req.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 bf_key = format!("bot_fp:{}", botfather_fp);
|
||||||
let stored_token = state.db.tokens.get(bf_key.as_bytes())
|
let stored_token = state.db.tokens.get(bf_key.as_bytes())
|
||||||
.ok().flatten()
|
.ok().flatten()
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ impl AppState {
|
|||||||
/// Returns true if delivered instantly (local or remote).
|
/// Returns true if delivered instantly (local or remote).
|
||||||
pub async fn deliver_or_queue(&self, to_fp: &str, message: &[u8]) -> bool {
|
pub async fn deliver_or_queue(&self, to_fp: &str, message: &[u8]) -> bool {
|
||||||
// BotFather: intercept messages to @botfather
|
// BotFather: intercept messages to @botfather
|
||||||
if self.bots_enabled && to_fp == "0000000000000000botfather00000000" {
|
if self.bots_enabled && to_fp == "00000000000000000b0ffa00e000000f" {
|
||||||
// Extract sender from message
|
// Extract sender from message
|
||||||
if let Ok(msg) = serde_json::from_slice::<serde_json::Value>(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("");
|
let from = msg.get("from").and_then(|v| v.as_str()).unwrap_or("");
|
||||||
|
|||||||
Reference in New Issue
Block a user