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 // Поиск через e621 API
try { try {
const config = require('../config'); 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 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', { const response = await axios.get('https://e621.net/posts.json', {
params: { params: {
@ -241,9 +258,32 @@ const handleInlineQuery = async (inlineQuery) => {
'User-Agent': E621_USER_AGENT, 'User-Agent': E621_USER_AGENT,
'Authorization': `Basic ${auth}` '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 = []; let postsData = [];
if (Array.isArray(response.data)) { if (Array.isArray(response.data)) {
postsData = response.data; postsData = response.data;
@ -264,8 +304,13 @@ const handleInlineQuery = async (inlineQuery) => {
source: 'e621' source: 'e621'
})); }));
} catch (error) { } catch (error) {
// Логировать только если это не 401/429 (они уже обработаны выше)
if (error.response?.status !== 401 && error.response?.status !== 429) {
logError('Ошибка поиска e621 для inline query', error); logError('Ошибка поиска e621 для inline query', error);
} }
// Вернуть пустой результат вместо падения
searchResults = [];
}
} else if (source === 'anime') { } else if (source === 'anime') {
// Поиск через Gelbooru API // Поиск через Gelbooru API
try { try {

View File

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

View File

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