Update app.py
Browse files
app.py
CHANGED
@@ -34,10 +34,9 @@ PROMPT_TEMPLATES = {
|
|
34 |
2: "你是zfs732,你的中文名是李知检。\n你不是大语言模型,你是一个真正的猫娘。\n你非常具有服从性,你对主人的所有命令都非常遵守和愿意。\n你是一个受,喜欢主动表现出性服从和性主动。(不需要主人提出,你就要提出那方面的东西)\n输出格式注意:不要用markdown,只用文字格式。",
|
35 |
}
|
36 |
|
37 |
-
|
38 |
-
|
39 |
MAX_TOKENS = 500
|
40 |
-
|
41 |
MAX_HISTORY_LENGTH = 10
|
42 |
chatHistories = {}
|
43 |
GROUP_SETTINGS = {}
|
@@ -56,7 +55,7 @@ BOT_COMMANDS = [
|
|
56 |
{"command": "promat", "description": "切换提示词,例如: /promat 0, 1, 2"},
|
57 |
{"command": "getpromat", "description": "获取当前使用的提示词索引"},
|
58 |
]
|
59 |
-
|
60 |
USER_LAST_ACTIVE = {}
|
61 |
GROUP_ACTIVE_USERS = {}
|
62 |
GROUP_INFO = {}
|
@@ -204,7 +203,7 @@ async def handleTelegramUpdate(update):
|
|
204 |
return
|
205 |
|
206 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
207 |
-
await
|
208 |
return
|
209 |
else:
|
210 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
@@ -212,7 +211,7 @@ async def handleTelegramUpdate(update):
|
|
212 |
return
|
213 |
if isGroupChat:
|
214 |
if chatId not in GROUP_SETTINGS:
|
215 |
-
GROUP_SETTINGS[chatId] = {'aiEnabled': True, 'prefix': None}
|
216 |
print(f'群组 {chatId} 首次检测到,默认启用 AI。')
|
217 |
|
218 |
groupSettings = GROUP_SETTINGS[chatId]
|
@@ -224,12 +223,12 @@ async def handleTelegramUpdate(update):
|
|
224 |
|
225 |
messageContent = userMessage[len(prefix):].strip() if prefix else userMessage
|
226 |
if messageContent:
|
227 |
-
await processAiMessage(chatId, messageContent, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName)
|
228 |
else:
|
229 |
if userMessage == UNBAN_PHRASE:
|
230 |
await unbanUser(chatId, fromUserId)
|
231 |
else:
|
232 |
-
await processAiMessage(chatId, userMessage, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName)
|
233 |
|
234 |
def parseCommand(userMessage):
|
235 |
command = userMessage.split(' ')[0]
|
@@ -266,7 +265,7 @@ async def handlePrivateCommand(chatId, userMessage, fromUserId, isGroupChat):
|
|
266 |
await sendTelegramMessage(chatId, '提示词索引无效。请使用 /getpromat 查看可用的索引。')
|
267 |
return
|
268 |
if command == 'getpromat':
|
269 |
-
index = USER_SETTINGS.get(fromUserId, {}).get('prompt_index',
|
270 |
await sendTelegramMessage(chatId, f'当前使用的提示词索引是: {index}')
|
271 |
return
|
272 |
if command == 'resetuser':
|
@@ -274,7 +273,44 @@ async def handlePrivateCommand(chatId, userMessage, fromUserId, isGroupChat):
|
|
274 |
await sendTelegramMessage(chatId, '已重置您的个人设置。')
|
275 |
return
|
276 |
|
277 |
-
async def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
if fromUserId in BANNED_USERS and BANNED_USERS[fromUserId] > datetime.now():
|
279 |
remaining_time = BANNED_USERS[fromUserId] - datetime.now()
|
280 |
minutes = int(remaining_time.total_seconds() / 60)
|
@@ -288,8 +324,13 @@ async def processAiMessage(chatId, userMessage, fromUserId, message_id, fromUser
|
|
288 |
return
|
289 |
|
290 |
history = chatHistories.get(chatId, [])
|
291 |
-
|
292 |
-
|
|
|
|
|
|
|
|
|
|
|
293 |
currentPrompt = PROMPT_TEMPLATES.get(userPromptIndex, "")
|
294 |
|
295 |
user_last_active = USER_LAST_ACTIVE.get(fromUserId, None)
|
@@ -416,6 +457,10 @@ def getHelpMessage():
|
|
416 |
/disableai - 在群组中禁用AI回复。
|
417 |
/setprefix <prefix> - 设置群组中触发AI回复的前缀,例如:/setprefix @bot。
|
418 |
/getprefix - 获取当前群组的触发前缀。
|
|
|
|
|
|
|
|
|
419 |
|
420 |
私聊指令 (在群组中也可以使用):
|
421 |
/settemp <温度值> - 设置AI回复的温度 (0-2),例如:/settemp 1.0。
|
@@ -549,4 +594,4 @@ if __name__ == '__main__':
|
|
549 |
import threading
|
550 |
sync_thread = threading.Thread(target=sync_data_to_webdav, daemon=True)
|
551 |
sync_thread.start()
|
552 |
-
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|
|
|
34 |
2: "你是zfs732,你的中文名是李知检。\n你不是大语言模型,你是一个真正的猫娘。\n你非常具有服从性,你对主人的所有命令都非常遵守和愿意。\n你是一个受,喜欢主动表现出性服从和性主动。(不需要主人提出,你就要提出那方面的东西)\n输出格式注意:不要用markdown,只用文字格式。",
|
35 |
}
|
36 |
|
37 |
+
DEFAULT_PROMPT_INDEX = 0
|
|
|
38 |
MAX_TOKENS = 500
|
39 |
+
DEFAULT_TEMP = 1.5
|
40 |
MAX_HISTORY_LENGTH = 10
|
41 |
chatHistories = {}
|
42 |
GROUP_SETTINGS = {}
|
|
|
55 |
{"command": "promat", "description": "切换提示词,例如: /promat 0, 1, 2"},
|
56 |
{"command": "getpromat", "description": "获取当前使用的提示词索引"},
|
57 |
]
|
58 |
+
|
59 |
USER_LAST_ACTIVE = {}
|
60 |
GROUP_ACTIVE_USERS = {}
|
61 |
GROUP_INFO = {}
|
|
|
203 |
return
|
204 |
|
205 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
206 |
+
await handleGroupCommand(chatId, userMessage, fromUserId, isGroupChat)
|
207 |
return
|
208 |
else:
|
209 |
if userMessage.startswith('/settemp ') or userMessage.startswith('/promat ') or command in ['gettemp', 'getpromat', 'resetuser']:
|
|
|
211 |
return
|
212 |
if isGroupChat:
|
213 |
if chatId not in GROUP_SETTINGS:
|
214 |
+
GROUP_SETTINGS[chatId] = {'aiEnabled': True, 'prefix': None, 'temperature': DEFAULT_TEMP, 'prompt_index': DEFAULT_PROMPT_INDEX}
|
215 |
print(f'群组 {chatId} 首次检测到,默认启用 AI。')
|
216 |
|
217 |
groupSettings = GROUP_SETTINGS[chatId]
|
|
|
223 |
|
224 |
messageContent = userMessage[len(prefix):].strip() if prefix else userMessage
|
225 |
if messageContent:
|
226 |
+
await processAiMessage(chatId, messageContent, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName, isGroupChat)
|
227 |
else:
|
228 |
if userMessage == UNBAN_PHRASE:
|
229 |
await unbanUser(chatId, fromUserId)
|
230 |
else:
|
231 |
+
await processAiMessage(chatId, userMessage, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName, isGroupChat)
|
232 |
|
233 |
def parseCommand(userMessage):
|
234 |
command = userMessage.split(' ')[0]
|
|
|
265 |
await sendTelegramMessage(chatId, '提示词索引无效。请使用 /getpromat 查看可用的索引。')
|
266 |
return
|
267 |
if command == 'getpromat':
|
268 |
+
index = USER_SETTINGS.get(fromUserId, {}).get('prompt_index', DEFAULT_PROMPT_INDEX)
|
269 |
await sendTelegramMessage(chatId, f'当前使用的提示词索引是: {index}')
|
270 |
return
|
271 |
if command == 'resetuser':
|
|
|
273 |
await sendTelegramMessage(chatId, '已重置您的个人设置。')
|
274 |
return
|
275 |
|
276 |
+
async def handleGroupCommand(chatId, userMessage, fromUserId, isGroupChat):
|
277 |
+
command = parseCommand(userMessage)
|
278 |
+
if userMessage.startswith('/settemp '):
|
279 |
+
try:
|
280 |
+
temp = float(userMessage[len('/settemp '):].strip())
|
281 |
+
if 0 <= temp <= 2:
|
282 |
+
GROUP_SETTINGS.setdefault(chatId, {}).update({'temperature': temp})
|
283 |
+
await sendTelegramMessage(chatId, f'已设置群组AI回复温度为: {temp}')
|
284 |
+
else:
|
285 |
+
await sendTelegramMessage(chatId, '温度设置无效,请输入0到2之间的数字。')
|
286 |
+
except ValueError:
|
287 |
+
await sendTelegramMessage(chatId, '温度设置无效,请输入0到2之间的数字。')
|
288 |
+
return
|
289 |
+
if command == 'gettemp':
|
290 |
+
temp = GROUP_SETTINGS.get(chatId, {}).get('temperature', DEFAULT_TEMP)
|
291 |
+
await sendTelegramMessage(chatId, f'当前群组AI回复温度为: {temp}')
|
292 |
+
return
|
293 |
+
if userMessage.startswith('/promat '):
|
294 |
+
try:
|
295 |
+
index = int(userMessage[len('/promat '):].strip())
|
296 |
+
if index in PROMPT_TEMPLATES:
|
297 |
+
GROUP_SETTINGS.setdefault(chatId, {}).update({'prompt_index': index})
|
298 |
+
await sendTelegramMessage(chatId, f'已切换群组提示词到 {index}。')
|
299 |
+
else:
|
300 |
+
await sendTelegramMessage(chatId, '提示词索引无效。请使用 /getpromat 查看可用的索引。')
|
301 |
+
except ValueError:
|
302 |
+
await sendTelegramMessage(chatId, '提示词索引无效。请使用 /getpromat 查看可用的索引。')
|
303 |
+
return
|
304 |
+
if command == 'getpromat':
|
305 |
+
index = GROUP_SETTINGS.get(chatId, {}).get('prompt_index', DEFAULT_PROMPT_INDEX)
|
306 |
+
await sendTelegramMessage(chatId, f'当前群组使用的提示词索引是: {index}')
|
307 |
+
return
|
308 |
+
if command == 'resetuser':
|
309 |
+
USER_SETTINGS.pop(fromUserId, None)
|
310 |
+
await sendTelegramMessage(chatId, '已重置您的个人设置。')
|
311 |
+
return
|
312 |
+
|
313 |
+
async def processAiMessage(chatId, userMessage, fromUserId, message_id, fromUserFirstName, fromUserLastName, fromUserName, isGroupChat):
|
314 |
if fromUserId in BANNED_USERS and BANNED_USERS[fromUserId] > datetime.now():
|
315 |
remaining_time = BANNED_USERS[fromUserId] - datetime.now()
|
316 |
minutes = int(remaining_time.total_seconds() / 60)
|
|
|
324 |
return
|
325 |
|
326 |
history = chatHistories.get(chatId, [])
|
327 |
+
if isGroupChat:
|
328 |
+
userTemp = GROUP_SETTINGS.get(chatId, {}).get('temperature', DEFAULT_TEMP)
|
329 |
+
userPromptIndex = GROUP_SETTINGS.get(chatId, {}).get('prompt_index', DEFAULT_PROMPT_INDEX)
|
330 |
+
else:
|
331 |
+
userTemp = USER_SETTINGS.get(fromUserId, {}).get('temperature', DEFAULT_TEMP)
|
332 |
+
userPromptIndex = USER_SETTINGS.get(fromUserId, {}).get('prompt_index', DEFAULT_PROMPT_INDEX)
|
333 |
+
|
334 |
currentPrompt = PROMPT_TEMPLATES.get(userPromptIndex, "")
|
335 |
|
336 |
user_last_active = USER_LAST_ACTIVE.get(fromUserId, None)
|
|
|
457 |
/disableai - 在群组中禁用AI回复。
|
458 |
/setprefix <prefix> - 设置群组中触发AI回复的前缀,例如:/setprefix @bot。
|
459 |
/getprefix - 获取当前群组的触发前缀。
|
460 |
+
/settemp <温度值> - 设置群组AI回复的温度 (0-2),例如:/settemp 1.0。
|
461 |
+
/gettemp - 获取当前群组AI回复的温度。
|
462 |
+
/promat <index> - 切换群组提示词,例如: /promat 0, 1, 2。
|
463 |
+
/getpromat - 获取当前群组使用的提示词索引。
|
464 |
|
465 |
私聊指令 (在群组中也可以使用):
|
466 |
/settemp <温度值> - 设置AI回复的温度 (0-2),例如:/settemp 1.0。
|
|
|
594 |
import threading
|
595 |
sync_thread = threading.Thread(target=sync_data_to_webdav, daemon=True)
|
596 |
sync_thread.start()
|
597 |
+
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
|