Прошу помощи, я совсем плох в JS, и я решил в качестве практики написать своего первого бота для Телеграма. В итоге бот работает без ошибок, до момента, пока я не начинаю вносить изменения. Так уж получилось, что моей задачей было выводить информацию с сайта в чат Телеграма, но я столкнулся с рядом проблем. Когда я хотел сделать отображение ника вместо ID, я решил написать соответствующий код, но вышло так, что у меня стало отображаться еще одно значение, т.е. значение рейтинга с сайта. Я удивленный, пытался понять, как это так. В итоге, когда я пытался все сделать так, как хотел, у меня выдавало ошибку (не совсем ошибку, бот просто не искал информацию с сайта). Я решил оставить ${nickname}, так как мне нужно, чтобы у меня отображалось пиковое значение рейтинга. Однако я столкнулся с большой проблемой - как мне вывести никнейм и заменить его вместо ID на ник. И вторая проблема - это то, что я не могу вывести нынешнее значение рейтинга (я пытался, но у меня бот не ищет информацию).
Код
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 |
const TelegramBot = require('node-telegram-bot-api'); const axios = require('axios'); const jsdom = require('jsdom'); const { JSDOM } = jsdom; const token = 'TOKEN'; const bot = new TelegramBot(token, {polling: true}); bot.onText(/\/stats (.+)/, async (msg, match) => { const chatId = msg.chat.id; const playerId = match[1]; try { const response = await axios.get(`https://corehalla.com/stats/player/${playerId}`); const html = response.data; const dom = new JSDOM(html); const document = dom.window.document; const stats = []; const element = document.querySelector('h1'); element.classList.add('text-5xl', 'font-bold'); const elements = document.querySelectorAll('.font-semibold.text-lg.mt-2, .font-semibold.text-lg.mt-2, .text-4xl.ml-3.text-textVar1'); for (let elem of elements) { const text = elem.textContent; stats.push(text); } const labels = document.querySelectorAll('.text-gray-500.text-sm, .text-gray-500.text-sm, .text-4xl.ml-3.text-textVar1'); for (let elem of labels) { const text = elem.textContent; stats.push(text); } const nickname = document.querySelector('.text-4xl.ml-3.text-textVar1').textContent; const reply = `Statistics for player ${playerId}: Peak ELO: ${nickname} Level: ${stats[0]} Experience: ${stats[1]} Playtime: ${stats[2]} Wins: ${stats[3]} Losses: ${stats[4]} Number of ranked 1v1 matches: ${stats[5]} Winrate: ${stats[6]} Playtime: ${stats[7]} Glory for rating: ${stats[8]} Glory for wins: ${stats[9]} Clan experience: ${stats[11]} Clan experience percentage: ${stats[12]} Clan: ${stats[13]} ...`; bot.sendMessage(chatId, reply); } catch (error) { console.error(error); bot.sendMessage(chatId, 'An error occurred while retrieving statistics'); } }); |
@h0912113 Не уверен если я точно понял Вашу проблему, но попробуйте данный код:
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 |
const TelegramBot = require("node-telegram-bot-api"); const axios = require("axios"); const jsdom = require("jsdom"); const { JSDOM } = jsdom; const token = "TOKEN"; const bot = new TelegramBot(token, { polling: true }); bot.onText(/\/stats (.+)/, async (msg, match) => { const chatId = msg.chat.id; const playerId = match[1]; try { const response = await axios.get( `https://corehalla.com/stats/player/${playerId}` ); const html = response.data; const dom = new JSDOM(html); const document = dom.window.document; const stats = []; const element = document.querySelector("h1"); element.classList.add("text-5xl", "font-bold"); const elements = document.querySelectorAll( ".font-semibold.text-lg.mt-2, .font-semibold.text-lg.mt-2, .text-4xl.ml-3.text-textVar1" ); for (const elem of elements) { const text = elem.textContent; stats.push(text); } const labels = document.querySelectorAll( ".text-gray-500.text-sm, .text-gray-500.text-sm, .text-4xl.ml-3.text-textVar1" ); for (const elem of labels) { const text = elem.textContent; stats.push(text); } const playerName = document.querySelector("h1").textContent; const nickname = document.querySelector(".text-4xl.ml-3.text-textVar1") .textContent; const reply = `Statistics for player ${playerName}: Peak ELO: ${nickname} Level: ${stats[0]} Experience: ${stats[1]} Playtime: ${stats[2]} Wins: ${stats[3]} Losses: ${stats[4]} Number of ranked 1v1 matches: ${stats[5]} Winrate: ${stats[6]} Playtime: ${stats[7]} Glory for rating: ${stats[8]} Glory for wins: ${stats[9]} Clan experience: ${stats[11]} Clan experience percentage: ${stats[12]} Clan: ${stats[13]} ...`; bot.sendMessage(chatId, reply); } catch (error) { console.error(error); bot.sendMessage(chatId, "An error occurred while retrieving statistics"); } }); |