Update app.py
Browse files
app.py
CHANGED
|
@@ -270,15 +270,17 @@ async def handleTelegramUpdate(update):
|
|
| 270 |
return
|
| 271 |
|
| 272 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
| 273 |
-
|
|
|
|
| 274 |
return
|
| 275 |
else:
|
| 276 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
|
|
|
| 277 |
await handlePrivateCommand(chatId, userMessage, fromUserId, isGroupChat)
|
| 278 |
return
|
| 279 |
if isGroupChat:
|
| 280 |
if chatId not in GROUP_SETTINGS:
|
| 281 |
-
GROUP_SETTINGS[chatId] = {'aiEnabled': True, 'prefix': None}
|
| 282 |
print(f'群组 {chatId} 首次检测到,默认启用 AI。')
|
| 283 |
|
| 284 |
groupSettings = GROUP_SETTINGS[chatId]
|
|
@@ -290,12 +292,12 @@ async def handleTelegramUpdate(update):
|
|
| 290 |
|
| 291 |
messageContent = userMessage[len(prefix):].strip() if prefix else userMessage
|
| 292 |
if messageContent:
|
| 293 |
-
await processAiMessage(chatId, messageContent, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName)
|
| 294 |
else:
|
| 295 |
if userMessage == UNBAN_PHRASE:
|
| 296 |
await unbanUser(chatId, fromUserId)
|
| 297 |
else:
|
| 298 |
-
await processAiMessage(chatId, userMessage, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName)
|
| 299 |
|
| 300 |
def parseCommand(userMessage):
|
| 301 |
command = userMessage.split(' ')[0]
|
|
@@ -340,7 +342,44 @@ async def handlePrivateCommand(chatId, userMessage, fromUserId, isGroupChat):
|
|
| 340 |
await sendTelegramMessage(chatId, '已重置您的个人设置。')
|
| 341 |
return
|
| 342 |
|
| 343 |
-
async def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 344 |
if fromUserId in BANNED_USERS and BANNED_USERS[fromUserId] > datetime.now():
|
| 345 |
remaining_time = BANNED_USERS[fromUserId] - datetime.now()
|
| 346 |
minutes = int(remaining_time.total_seconds() / 60)
|
|
@@ -354,8 +393,16 @@ async def processAiMessage(chatId, userMessage, fromUserId, message_id, fromUser
|
|
| 354 |
return
|
| 355 |
|
| 356 |
history = chatHistories.get(chatId, [])
|
| 357 |
-
|
| 358 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 359 |
currentPrompt = PROMPT_TEMPLATES.get(userPromptIndex, "")
|
| 360 |
|
| 361 |
user_last_active = USER_LAST_ACTIVE.get(fromUserId, None)
|
|
@@ -482,8 +529,12 @@ def getHelpMessage():
|
|
| 482 |
/disableai - 在群组中禁用AI回复。
|
| 483 |
/setprefix <prefix> - 设置群组中触发AI回复的前缀,例如:/setprefix @bot。
|
| 484 |
/getprefix - 获取当前群组的触发前缀。
|
|
|
|
|
|
|
|
|
|
|
|
|
| 485 |
|
| 486 |
-
私聊指令 (
|
| 487 |
/settemp <温度值> - 设置AI回复的温度 (0-2),例如:/settemp 1.0。
|
| 488 |
/gettemp - 获取当前AI回复的温度。
|
| 489 |
/resetuser - 重置你的个人设置。
|
|
|
|
| 270 |
return
|
| 271 |
|
| 272 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
| 273 |
+
# 群组中,私聊指令只用于设置群组的
|
| 274 |
+
await handleGroupCommand(chatId, userMessage, fromUserId, isGroupChat)
|
| 275 |
return
|
| 276 |
else:
|
| 277 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
| 278 |
+
# 私聊时,使用用户的设置
|
| 279 |
await handlePrivateCommand(chatId, userMessage, fromUserId, isGroupChat)
|
| 280 |
return
|
| 281 |
if isGroupChat:
|
| 282 |
if chatId not in GROUP_SETTINGS:
|
| 283 |
+
GROUP_SETTINGS[chatId] = {'aiEnabled': True, 'prefix': None, 'temperature': DEFAULT_TEMP, 'prompt_index': CURRENT_PROMPT_INDEX} # 初始化群组设置
|
| 284 |
print(f'群组 {chatId} 首次检测到,默认启用 AI。')
|
| 285 |
|
| 286 |
groupSettings = GROUP_SETTINGS[chatId]
|
|
|
|
| 292 |
|
| 293 |
messageContent = userMessage[len(prefix):].strip() if prefix else userMessage
|
| 294 |
if messageContent:
|
| 295 |
+
await processAiMessage(chatId, messageContent, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName, isGroupChat) # 传递 isGroupChat
|
| 296 |
else:
|
| 297 |
if userMessage == UNBAN_PHRASE:
|
| 298 |
await unbanUser(chatId, fromUserId)
|
| 299 |
else:
|
| 300 |
+
await processAiMessage(chatId, userMessage, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName, isGroupChat) # 传递 isGroupChat
|
| 301 |
|
| 302 |
def parseCommand(userMessage):
|
| 303 |
command = userMessage.split(' ')[0]
|
|
|
|
| 342 |
await sendTelegramMessage(chatId, '已重置您的个人设置。')
|
| 343 |
return
|
| 344 |
|
| 345 |
+
async def handleGroupCommand(chatId, userMessage, fromUserId, isGroupChat):
|
| 346 |
+
command = parseCommand(userMessage)
|
| 347 |
+
if userMessage.startswith('/settemp '):
|
| 348 |
+
try:
|
| 349 |
+
temp = float(userMessage[len('/settemp '):].strip())
|
| 350 |
+
if 0 <= temp <= 2:
|
| 351 |
+
GROUP_SETTINGS.setdefault(chatId, {}).update({'temperature': temp})
|
| 352 |
+
await sendTelegramMessage(chatId, f'已设置群组AI回复温度为: {temp}')
|
| 353 |
+
else:
|
| 354 |
+
await sendTelegramMessage(chatId, '温度设置无效,请输入0到2之间的数字。')
|
| 355 |
+
except ValueError:
|
| 356 |
+
await sendTelegramMessage(chatId, '温度设置无效,请输入0到2之间的数字。')
|
| 357 |
+
return
|
| 358 |
+
if command == 'gettemp':
|
| 359 |
+
temp = GROUP_SETTINGS.get(chatId, {}).get('temperature', DEFAULT_TEMP)
|
| 360 |
+
await sendTelegramMessage(chatId, f'当前群组AI回复温度为: {temp}')
|
| 361 |
+
return
|
| 362 |
+
if userMessage.startswith('/promat '):
|
| 363 |
+
try:
|
| 364 |
+
index = int(userMessage[len('/promat '):].strip())
|
| 365 |
+
if index in PROMPT_TEMPLATES:
|
| 366 |
+
GROUP_SETTINGS.setdefault(chatId, {}).update({'prompt_index': index})
|
| 367 |
+
await sendTelegramMessage(chatId, f'已切换到群组提示词 {index}。')
|
| 368 |
+
else:
|
| 369 |
+
await sendTelegramMessage(chatId, '提示词索引无效。请使用 /getpromat 查看可用的索引。')
|
| 370 |
+
except ValueError:
|
| 371 |
+
await sendTelegramMessage(chatId, '提示词索引无效。请使用 /getpromat 查看可用的索引。')
|
| 372 |
+
return
|
| 373 |
+
if command == 'getpromat':
|
| 374 |
+
index = GROUP_SETTINGS.get(chatId, {}).get('prompt_index', CURRENT_PROMPT_INDEX)
|
| 375 |
+
await sendTelegramMessage(chatId, f'当前群组使用的提示词索引是: {index}')
|
| 376 |
+
return
|
| 377 |
+
if command == 'resetuser':
|
| 378 |
+
# 群组中不应该重置用户的私聊设置
|
| 379 |
+
await sendTelegramMessage(chatId, '群组设置中,该指令无效。')
|
| 380 |
+
return
|
| 381 |
+
|
| 382 |
+
async def processAiMessage(chatId, userMessage, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName, isGroupChat):
|
| 383 |
if fromUserId in BANNED_USERS and BANNED_USERS[fromUserId] > datetime.now():
|
| 384 |
remaining_time = BANNED_USERS[fromUserId] - datetime.now()
|
| 385 |
minutes = int(remaining_time.total_seconds() / 60)
|
|
|
|
| 393 |
return
|
| 394 |
|
| 395 |
history = chatHistories.get(chatId, [])
|
| 396 |
+
|
| 397 |
+
if isGroupChat:
|
| 398 |
+
# 从群组设置获取温度和提示词
|
| 399 |
+
userTemp = GROUP_SETTINGS.get(chatId, {}).get('temperature', DEFAULT_TEMP)
|
| 400 |
+
userPromptIndex = GROUP_SETTINGS.get(chatId, {}).get('prompt_index', CURRENT_PROMPT_INDEX)
|
| 401 |
+
else:
|
| 402 |
+
# 从用户设置获取温度和提示词
|
| 403 |
+
userTemp = USER_SETTINGS.get(fromUserId, {}).get('temperature', DEFAULT_TEMP)
|
| 404 |
+
userPromptIndex = USER_SETTINGS.get(fromUserId, {}).get('prompt_index', CURRENT_PROMPT_INDEX)
|
| 405 |
+
|
| 406 |
currentPrompt = PROMPT_TEMPLATES.get(userPromptIndex, "")
|
| 407 |
|
| 408 |
user_last_active = USER_LAST_ACTIVE.get(fromUserId, None)
|
|
|
|
| 529 |
/disableai - 在群组中禁用AI回复。
|
| 530 |
/setprefix <prefix> - 设置群组中触发AI回复的前缀,例如:/setprefix @bot。
|
| 531 |
/getprefix - 获取当前群组的触发前缀。
|
| 532 |
+
/settemp <温度值> - 设置群组AI回复的温度 (0-2),例如:/settemp 1.0。
|
| 533 |
+
/gettemp - 获取当前群组AI回复的温度。
|
| 534 |
+
/promat <index> - 切换群组提示词,例如: /promat 0, 1, 2。
|
| 535 |
+
/getpromat - 获取当前群组使用的提示词索引。
|
| 536 |
|
| 537 |
+
私聊指令 (在群组中也可以使用,但是设置的是私聊的):
|
| 538 |
/settemp <温度值> - 设置AI回复的温度 (0-2),例如:/settemp 1.0。
|
| 539 |
/gettemp - 获取当前AI回复的温度。
|
| 540 |
/resetuser - 重置你的个人设置。
|