Update files

This commit is contained in:
glpshchn 2025-12-08 01:58:38 +03:00
parent 4150c03bdb
commit 63b7c0d8f0
3 changed files with 61 additions and 10 deletions

View File

@ -229,8 +229,25 @@ const handleInlineQuery = async (inlineQuery) => {
// Поиск через e621 API
try {
const config = require('../config');
// Проверить наличие API ключа
if (!config.e621ApiKey) {
log('warn', 'e621 API ключ не настроен для inline query');
await axios.post(`${TELEGRAM_API}/answerInlineQuery`, {
inline_query_id: queryId,
results: [],
cache_time: 60
});
return;
}
const E621_USER_AGENT = 'NakamaApp/1.0 (by glpshchn00 on e621; Telegram: @glpshchn00)';
const auth = Buffer.from(`${config.e621Username}:${config.e621ApiKey}`).toString('base64');
// e621 использует Basic Auth с username:api_key
// Если username не указан, используем API ключ как username и пустой пароль
// Или можно использовать формат :api_key (пустой username)
const username = config.e621Username || config.e621ApiKey;
const auth = Buffer.from(`${username}:${config.e621ApiKey}`).toString('base64');
const response = await axios.get('https://e621.net/posts.json', {
params: {
@ -241,9 +258,32 @@ const handleInlineQuery = async (inlineQuery) => {
'User-Agent': E621_USER_AGENT,
'Authorization': `Basic ${auth}`
},
timeout: 10000
timeout: 10000,
validateStatus: (status) => status < 500 // Не бросать ошибку для 401/429
});
// Обработка ошибок авторизации
if (response.status === 401) {
log('warn', 'e621 API вернул 401 - неверные учетные данные для inline query');
await axios.post(`${TELEGRAM_API}/answerInlineQuery`, {
inline_query_id: queryId,
results: [],
cache_time: 60
});
return;
}
// Обработка rate limit
if (response.status === 429) {
log('warn', 'e621 rate limit (429) для inline query');
await axios.post(`${TELEGRAM_API}/answerInlineQuery`, {
inline_query_id: queryId,
results: [],
cache_time: 60
});
return;
}
let postsData = [];
if (Array.isArray(response.data)) {
postsData = response.data;
@ -264,7 +304,12 @@ const handleInlineQuery = async (inlineQuery) => {
source: 'e621'
}));
} catch (error) {
logError('Ошибка поиска e621 для inline query', error);
// Логировать только если это не 401/429 (они уже обработаны выше)
if (error.response?.status !== 401 && error.response?.status !== 429) {
logError('Ошибка поиска e621 для inline query', error);
}
// Вернуть пустой результат вместо падения
searchResults = [];
}
} else if (source === 'anime') {
// Поиск через Gelbooru API

View File

@ -37,7 +37,7 @@ module.exports = {
gelbooruUserId: process.env.GELBOORU_USER_ID || '1844464',
// e621 API
e621Username: process.env.E621_USERNAME || 'glpshchn00',
e621Username: process.env.E621_USERNAME || '', // Опционально, можно оставить пустым
e621ApiKey: process.env.E621_API_KEY || 'MWYMw57r2Gu6Yxvw1YvepNvZ',
// Frontend URL

View File

@ -88,11 +88,13 @@ router.get('/proxy/:encodedUrl', async (req, res) => {
'Referer': urlObj.origin
};
// Если это e621, добавляем авторизацию (если есть учетные данные)
if (urlObj.hostname.includes('e621.net') && config.e621Username && config.e621ApiKey) {
// Если это e621, добавляем авторизацию (если есть API ключ)
if (urlObj.hostname.includes('e621.net') && config.e621ApiKey) {
try {
const auth = Buffer.from(`${config.e621Username}:${config.e621ApiKey}`).toString('base64');
headers['Authorization'] = `Basic ${auth}`;
// Если username не указан, используем API ключ как username
const username = config.e621Username || config.e621ApiKey;
const auth = Buffer.from(`${username}:${config.e621ApiKey}`).toString('base64');
headers['Authorization'] = `Basic ${auth}`;
} catch (error) {
console.warn('⚠️ Ошибка создания Basic auth для e621:', error.message);
// Продолжаем без авторизации
@ -141,7 +143,9 @@ router.get('/furry', authenticate, async (req, res) => {
try {
// Базовая авторизация для e621 API
const auth = Buffer.from(`${config.e621Username}:${config.e621ApiKey}`).toString('base64');
// Если username не указан, используем API ключ как username
const username = config.e621Username || config.e621ApiKey;
const auth = Buffer.from(`${username}:${config.e621ApiKey}`).toString('base64');
const response = await axios.get('https://e621.net/posts.json', {
params: {
@ -347,7 +351,9 @@ router.get('/furry/tags', authenticate, async (req, res) => {
try {
// Базовая авторизация для e621 API
const auth = Buffer.from(`${config.e621Username}:${config.e621ApiKey}`).toString('base64');
// Если username не указан, используем API ключ как username
const username = config.e621Username || config.e621ApiKey;
const auth = Buffer.from(`${username}:${config.e621ApiKey}`).toString('base64');
const response = await axios.get('https://e621.net/tags.json', {
params: {