File size: 4,461 Bytes
abed4cc
5d38af1
e6227e8
5669f71
abed4cc
5d38af1
 
2b785ca
 
df04541
9f5172e
 
 
 
 
 
587da90
4bbe8d3
1cc4d60
 
4bbe8d3
1cc4d60
4bbe8d3
 
 
1cc4d60
9f5172e
a97fdfd
5743387
 
f16210d
587da90
e25c36c
 
0d0b67b
f97d87a
1cc4d60
 
6771456
587da90
5d38af1
1cc4d60
a97fdfd
1cc4d60
163bf37
332f604
 
 
 
587da90
2b60bab
5743387
1cc4d60
5743387
1cc4d60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5743387
1cc4d60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
efaa50c
1cc4d60
efaa50c
 
 
e25c36c
efaa50c
1cc4d60
d01b1a6
 
 
 
 
587da90
3792746
 
1cc4d60
3792746
 
 
1cc4d60
 
 
5743387
1cc4d60
3792746
 
 
abed4cc
 
e0c2616
1cc4d60
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
const express = require('express');
const rateLimit = require('express-rate-limit');
const axios = require('axios');

const app = express();
app.use(express.json());

// Доверие к одному прокси (например, Heroku)
app.set('trust proxy', 1);

const openai_keys = process.env.OPENAI_KEY.split(',');

function getRandomApiKey() {
  const randomIndex = Math.floor(Math.random() * openai_keys.length);
  return openai_keys[randomIndex];
}

const limiter = rateLimit({
  windowMs: 60 * 1000, // 60 секунд
  max: 15, // лимит каждые 60 секунд на IP
  handler: function (req, res) {
    return res.status(429).json({ content: "wait" });
  },
});

// Применение ограничителя скорости перед обработчиком маршрута /pl и /plbeta
app.use('/pl', limiter);
app.use('/plbeta', limiter);

const start = `${process.env.start}`;
const startconnect = `${process.env.startconnect}`;

app.post('/update', async (req, res) => {
  res.json({ content: `{"error":"", "title":"Требуется обновление", "text":"Текущая версия приложения устарела. Установите новую из нашего телеграм канала: @yufi_ru", "okb":"Обновить", "oklink":"https://t.me/yufi_ru", "cancelable":"false"}` });
});

async function sendRequest(prompt, prs) {
  const firstUrl = 'https://text.pollinations.ai/openai';
  const secondUrl = 'https://text.pollinations.ai/openai';

  try {
    const response = await axios.post(firstUrl, {
      messages: [{'role': 'system', 'content': prs}, {'role': 'user', 'content': prompt}],
      max_tokens: 1200,
      temperature: 0.19,
    }, {
      headers: {
        'Content-Type': 'application/json',
      },
    });

    if (response.data.choices && response.data.choices.length > 0 && response.data.choices[0].message) {
      return response.data.choices[0].message.content.trim();
    } else {
      throw new Error("Ошибка прочтения на первой ссылке");
    }
  } catch (error) {
    console.error("Первая попытка не удалась:", error);
    // Попытка с другой ссылкой
    try {
      const response = await axios.post(secondUrl, {
        messages: [{'role': 'system', 'content': prs}, {'role': 'user', 'content': prompt}],
        max_tokens: 1200,
        temperature: 0.19,
      }, {
        headers: {
          'Content-Type': 'application/json',
        },
      });

      if (response.data.choices && response.data.choices.length > 0 && response.data.choices[0].message) {
        return response.data.choices[0].message.content.trim();
      } else {
        throw new Error("Ошибка прочтения на второй ссылке");
      }
    } catch (secondError) {
      console.error("Вторая попытка не удалась:", secondError);
      throw new Error("Ошибка при генерации");
    }
  }
}

app.post('/pl', async (req, res) => {
  const prompt = req.body.prompt;
  let prs;

  if (req.body.mode === "1") {
    prs = start;
  } else {
    prs = startconnect;
  }

  if (!prompt) {
    return res.status(400).json({ content: "wait" }); // Не удалось принять данные
  }

  try {
    const content = await sendRequest(prompt, prs);
    res.json({ content });
  } catch (error) {
    res.json({ content: `{"error":"", "title":"Ошибка", "text":"Произошла ошибка на сервере. (${error.message})", "okb":"Ок", "oklink":"", "cancelable":"true"}` });
  }
});

app.post('/plbeta', async (req, res) => {
  const prompt = req.body.prompt;
  let prs;

  if (req.body.mode === "1") {
    prs = start;
  } else {
    prs = startconnect;
  }

  if (!prompt) {
    return res.status(400).json({ content: "wait" }); // Не удалось принять данные
  }

  try {
    const content = await sendRequest(prompt, prs);
    console.log(`\n---\nПользователь: ${prompt}\n    Ответ:\n      ${content}`);
    res.json({ content });
  } catch (error) {
    res.json({ content: `{"error":"", "title":"Ошибка", "text":"Произошла ошибка на сервере. (${error.message})", "okb":"Ок", "oklink":"", "cancelable":"true"}` });
  }
});

const port = 7860;
app.listen(port, () => {
  console.log(`API сервер запущен на порту ${port}`);
});