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 - 重置你的个人设置。
|