aseli commited on
Commit
a8608fa
·
verified ·
1 Parent(s): 8145d48

Update cai.js

Browse files
Files changed (1) hide show
  1. cai.js +75 -78
cai.js CHANGED
@@ -5,58 +5,55 @@ const PORT = 7860;
5
 
6
  const DEFAULT_TOKEN = process.env['TOKEN_CAI']; // ganti dengan token default Anda
7
 
 
 
8
  let sessions = [];
9
 
10
  const createSession = async (token) => {
11
- const existingSession = sessions.find(v => (v.token == token && v.expires > Date.now()) || (v.token == token && v.isDefault));
12
- if (existingSession) {
13
- return existingSession;
14
- } else {
15
- // Hapus sesi kadaluarsa
16
- await cleanExpiredSessions();
17
-
18
- const characterAI = new CharacterAI();
19
- await characterAI.authenticateWithToken(token);
20
- const session = {
21
- token,
22
- characterAI,
23
- expires: ((token == DEFAULT_TOKEN) ? null : (Date.now() + 3600000)), // 1 jam
24
- browser: characterAI.unauthenticate, // Simpan instance browser
25
- isDefault: (token == DEFAULT_TOKEN ? true : false)
26
- };
27
- sessions.push(session);
28
- return session;
29
- }
30
  };
31
 
32
  const getSession = async (token) => {
33
- let session = sessions.find(s => s.token === token);
34
- if ((session && session.expires > Date.now()) || (session && session.isDefault)) {
35
- return session;
36
- } else {
37
- // Hapus sesi kadaluarsa
38
- await cleanExpiredSessions();
39
- return await createSession(token);
40
- }
41
  };
42
 
43
  const cleanExpiredSessions = async () => {
44
- console.log(sessions)
45
- const now = Date.now();
46
- const expiredSessions = sessions.filter(session => session.expires <= now && !session.isDefault);
47
-
48
- // Tutup browser dari sesi yang kedaluwarsa
49
- for (const session of expiredSessions) {
50
- if (session.browser) {
51
- await session.browser();
52
- }
53
- }
54
-
55
- // Hapus sesi yang kadaluarsa dari array sessions
56
- sessions = sessions.filter(session => session.expires > now && !session.isDefault);
57
  };
58
 
59
- // Jalankan pembersihan sesi kadaluarsa setiap 10 menit
60
  setInterval(cleanExpiredSessions, 10 * 60 * 1000);
61
 
62
  app.use(express.json());
@@ -67,50 +64,50 @@ app.get('/', async (req, res) => {
67
  console.log(new Date().toLocaleString('id-ID', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit' }));
68
  })
69
  app.get('/api', async (req, res) => {
70
- const { token, text, characterId, sessionId } = req.query;
71
-
72
- try {
73
- const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
74
- const chat = await session.characterAI.createOrContinueChat(characterId);
75
- sessionId ? await chat.changeToConversationId(sessionId, true) : await chat.saveAndStartNewChat()
76
- const response = await chat.sendAndAwaitResponse(text, true);
77
- console.log(response)
78
- response.sessionId = response?.chat?.externalId
79
- response.characterId = response?.chat?.characterId
80
- delete response.chat
81
- res.send({ success: true, result: response });
82
- console.log('api done')
83
- } catch (error) {
84
- res.status(500).json({ error: error.message });
85
- }
86
  });
87
 
88
  app.get('/api/chara/search', async (req, res) => {
89
- const { name, token } = req.query;
90
-
91
- try {
92
- const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
93
- const characters = await session.characterAI.searchCharacters(name);
94
- res.send({ success: true, result: characters.characters });
95
- console.log('search done')
96
- } catch (error) {
97
- res.status(500).json({ error: error.message });
98
- }
99
  });
100
 
101
  app.get('/api/chara/info', async (req, res) => {
102
- const { characterId, token } = req.query;
103
-
104
- try {
105
- const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
106
- const characterInfo = await session.characterAI.fetchCharacterInfo(characterId);
107
- res.json({ success: true, result: characterInfo });
108
- console.log('info done')
109
- } catch (error) {
110
- res.status(500).json({ error: error.message });
111
- }
112
  });
113
 
114
  app.listen(PORT, () => {
115
- console.log(`Server running on port ${PORT}`);
116
  });
 
5
 
6
  const DEFAULT_TOKEN = process.env['TOKEN_CAI']; // ganti dengan token default Anda
7
 
8
+ const SESSION_DURATION = 3600000; // 1 jam dalam milidetik
9
+
10
  let sessions = [];
11
 
12
  const createSession = async (token) => {
13
+ const existingSession = sessions.find(v => v.token === token);
14
+ if (existingSession) {
15
+ return existingSession;
16
+ }
17
+
18
+ const characterAI = new CharacterAI();
19
+ await characterAI.authenticateWithToken(token);
20
+ const session = {
21
+ token,
22
+ characterAI,
23
+ lastUsed: Date.now(), // Tambahkan waktu terakhir digunakan
24
+ browser: characterAI.unauthenticate, // Simpan instance browser
25
+ isDefault: token === DEFAULT_TOKEN
26
+ };
27
+ sessions.push(session);
28
+ return session;
 
 
 
29
  };
30
 
31
  const getSession = async (token) => {
32
+ let session = sessions.find(s => s.token === token);
33
+ if (session) {
34
+ session.lastUsed = Date.now(); // Update waktu terakhir digunakan
35
+ return session;
36
+ } else {
37
+ return await createSession(token);
38
+ }
 
39
  };
40
 
41
  const cleanExpiredSessions = async () => {
42
+ const now = Date.now(); // Ambil waktu saat ini
43
+ const expiredSessions = sessions.filter(session => !session.isDefault && session.lastUsed <= now - SESSION_DURATION);
44
+
45
+ // Tutup browser dari sesi yang tidak digunakan lebih dari 1 jam
46
+ for (const session of expiredSessions) {
47
+ if (session.browser) {
48
+ await session.browser();
49
+ }
50
+ }
51
+
52
+ // Hapus sesi yang tidak digunakan lebih dari 1 jam dari array sessions
53
+ sessions = sessions.filter(session => session.isDefault || session.lastUsed > now - SESSION_DURATION);
 
54
  };
55
 
56
+ // Jalankan pembersihan sesi tidak digunakan setiap 10 menit
57
  setInterval(cleanExpiredSessions, 10 * 60 * 1000);
58
 
59
  app.use(express.json());
 
64
  console.log(new Date().toLocaleString('id-ID', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit' }));
65
  })
66
  app.get('/api', async (req, res) => {
67
+ const { token, text, characterId, sessionId } = req.query;
68
+
69
+ try {
70
+ const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
71
+ const chat = await session.characterAI.createOrContinueChat(characterId);
72
+ sessionId ? await chat.changeToConversationId(sessionId, true) : await chat.saveAndStartNewChat()
73
+ const response = await chat.sendAndAwaitResponse(text, true);
74
+ console.log(response)
75
+ response.sessionId = response?.chat?.externalId
76
+ response.characterId = response?.chat?.characterId
77
+ delete response.chat
78
+ res.send({ success: true, result: response });
79
+ console.log('api done')
80
+ } catch (error) {
81
+ res.status(500).json({ error: error.message });
82
+ }
83
  });
84
 
85
  app.get('/api/chara/search', async (req, res) => {
86
+ const { name, token } = req.query;
87
+
88
+ try {
89
+ const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
90
+ const characters = await session.characterAI.searchCharacters(name);
91
+ res.send({ success: true, result: characters.characters });
92
+ console.log('search done')
93
+ } catch (error) {
94
+ res.status(500).json({ error: error.message });
95
+ }
96
  });
97
 
98
  app.get('/api/chara/info', async (req, res) => {
99
+ const { characterId, token } = req.query;
100
+
101
+ try {
102
+ const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
103
+ const characterInfo = await session.characterAI.fetchCharacterInfo(characterId);
104
+ res.json({ success: true, result: characterInfo });
105
+ console.log('info done')
106
+ } catch (error) {
107
+ res.status(500).json({ error: error.message });
108
+ }
109
  });
110
 
111
  app.listen(PORT, () => {
112
+ console.log(`Server running on port ${PORT}`);
113
  });