修改了限流器,现在限流器是根据bot_token限流了
This commit is contained in:
parent
f510000e10
commit
3e75cb6ef6
@ -17,7 +17,6 @@ telegram_bot_token = os.getenv("TELEGRAM_BOT_TOKEN")
|
|||||||
logger.remove()
|
logger.remove()
|
||||||
|
|
||||||
# 添加新的日志处理器,设置日志级别为 DEBUG
|
# 添加新的日志处理器,设置日志级别为 DEBUG
|
||||||
|
|
||||||
logger.add(sys.stderr, level="INFO")
|
logger.add(sys.stderr, level="INFO")
|
||||||
|
|
||||||
|
|
||||||
@ -48,11 +47,13 @@ async def _send_message_to_user(bot_token, target_id, message, rate_limiter, ses
|
|||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
return await _send_message_to_user(bot_token, target_id, message, rate_limiter, session)
|
return await _send_message_to_user(bot_token, target_id, message, rate_limiter, session)
|
||||||
|
|
||||||
|
parse_mode = determine_parse_mode(message)
|
||||||
|
|
||||||
base_url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
|
base_url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
|
||||||
params = {
|
params = {
|
||||||
"chat_id": target_id,
|
"chat_id": target_id,
|
||||||
"text": message,
|
"text": message,
|
||||||
"parse_mode": "MarkdownV2"
|
"parse_mode": parse_mode
|
||||||
}
|
}
|
||||||
|
|
||||||
max_retry = 3
|
max_retry = 3
|
||||||
@ -74,15 +75,46 @@ async def _send_message_to_user(bot_token, target_id, message, rate_limiter, ses
|
|||||||
logger.debug('消息发送失败')
|
logger.debug('消息发送失败')
|
||||||
|
|
||||||
|
|
||||||
|
def determine_parse_mode(message_text):
|
||||||
|
"""
|
||||||
|
Determine the appropriate parse mode based on the message content.
|
||||||
|
For simplicity, assume that if the message contains certain HTML tags, use HTML parse mode.
|
||||||
|
Otherwise, use MarkdownV2.
|
||||||
|
"""
|
||||||
|
html_tags = ['<b>', '<i>', '<a>', '<code>', '<pre>']
|
||||||
|
if any(tag in message_text for tag in html_tags):
|
||||||
|
return 'HTML'
|
||||||
|
return 'MarkdownV2'
|
||||||
|
|
||||||
|
|
||||||
|
def parse_message(body):
|
||||||
|
parts = body.split('|')
|
||||||
|
if len(parts) == 3:
|
||||||
|
bot_token, target_id, message_text = parts
|
||||||
|
else:
|
||||||
|
parts = body.split('#')
|
||||||
|
if len(parts) == 3:
|
||||||
|
bot_token, target_id, message_text = parts
|
||||||
|
else:
|
||||||
|
raise ValueError("Unknown message format")
|
||||||
|
return bot_token, target_id, message_text
|
||||||
|
|
||||||
|
|
||||||
async def message_handler(message: aio_pika.IncomingMessage):
|
async def message_handler(message: aio_pika.IncomingMessage):
|
||||||
async with message.process():
|
async with message.process():
|
||||||
logger.info(message.body.decode())
|
logger.info(message.body.decode())
|
||||||
bot_token, target_id, message_text = message.body.decode().split('|')
|
try:
|
||||||
|
bot_token, target_id, message_text = parse_message(message.body.decode())
|
||||||
|
except ValueError as e:
|
||||||
|
logger.error(f'无法解析消息格式: {e}')
|
||||||
|
return
|
||||||
|
|
||||||
if target_id.startswith('-'): # 群组ID以'-'开头
|
if target_id.startswith('-'): # 群组ID以'-'开头
|
||||||
rate_limiter = group_rate_limiters[target_id]
|
rate_limiter = group_rate_limiters[bot_token]
|
||||||
else:
|
else:
|
||||||
rate_limiter = rate_limiters[target_id]
|
rate_limiter = rate_limiters[bot_token]
|
||||||
await _send_message_to_user(bot_token, target_id, message_text, rate_limiter, session)
|
if message_text:
|
||||||
|
await _send_message_to_user(bot_token, target_id, message_text, rate_limiter, session)
|
||||||
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
|
Loading…
Reference in New Issue
Block a user