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