aseli commited on
Commit
76fd8b6
·
verified ·
1 Parent(s): 3ccc3f7

Upload cai.js

Browse files
Files changed (1) hide show
  1. cai.js +101 -0
cai.js ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const CharacterAI = require('node_characterai');
3
+ const app = express();
4
+ const PORT = 7860;
5
+
6
+ const DEFAULT_TOKEN = process.env['TOKEN']; // 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());
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: Date.now() + 3600000, // 1 jam
24
+ browser: characterAI.browser // Simpan instance browser
25
+ };
26
+ sessions.push(session);
27
+ return session;
28
+ }
29
+ };
30
+
31
+ const getSession = async (token) => {
32
+ let session = sessions.find(s => s.token === token);
33
+ if (session && session.expires > Date.now()) {
34
+ return session;
35
+ } else {
36
+ // Hapus sesi kadaluarsa
37
+ await cleanExpiredSessions();
38
+ return await createSession(token);
39
+ }
40
+ };
41
+
42
+ const cleanExpiredSessions = async () => {
43
+ const now = Date.now();
44
+ const expiredSessions = sessions.filter(session => session.expires <= now);
45
+
46
+ // Tutup browser dari sesi yang kedaluwarsa
47
+ for (const session of expiredSessions) {
48
+ if (session.browser && session.browser.close) {
49
+ await session.browser.close();
50
+ }
51
+ }
52
+
53
+ // Hapus sesi yang kadaluarsa dari array sessions
54
+ sessions = sessions.filter(session => session.expires > now);
55
+ };
56
+
57
+ // Jalankan pembersihan sesi kadaluarsa setiap 10 menit
58
+ setInterval(cleanExpiredSessions, 10 * 60 * 1000);
59
+
60
+ app.use(express.json());
61
+
62
+ app.post('/chat', async (req, res) => {
63
+ const { token, message, characterId, externalId } = req.body;
64
+
65
+ try {
66
+ const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
67
+ const chat = await session.characterAI.createOrContinueChat(characterId, externalId);
68
+ const response = await chat.sendAndAwaitResponse(message, true);
69
+ res.json({ response: response.text });
70
+ } catch (error) {
71
+ res.status(500).json({ error: error.message });
72
+ }
73
+ });
74
+
75
+ app.get('/search', async (req, res) => {
76
+ const { name, token } = req.query;
77
+
78
+ try {
79
+ const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
80
+ const characters = await session.characterAI.searchCharacters(name);
81
+ res.json({ characters });
82
+ } catch (error) {
83
+ res.status(500).json({ error: error.message });
84
+ }
85
+ });
86
+
87
+ app.get('/character', async (req, res) => {
88
+ const { characterId, token } = req.query;
89
+
90
+ try {
91
+ const session = token ? await getSession(token) : await createSession(DEFAULT_TOKEN);
92
+ const characterInfo = await session.characterAI.fetchCharacterInfo(characterId);
93
+ res.json({ characterInfo });
94
+ } catch (error) {
95
+ res.status(500).json({ error: error.message });
96
+ }
97
+ });
98
+
99
+ app.listen(PORT, () => {
100
+ console.log(`Server running on port ${PORT}`);
101
+ });