GithubHelp home page GithubHelp logo

dmitry-weirdo / wiki-telegram-bot Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 1.0 1.9 MB

Telegram bot for getting answers on topics for 🇺🇦 Ukrainian refugees and volunteers. Relates to https://uahelp.wiki/ and https://www.youtube.com/UAhelp.

Home Page: https://uahelp.wiki/tools/telegram/bots/dv-wiki-bot

Shell 0.39% Kotlin 99.61%
bot deutschland digital-volunteers germany helpukraine kotlin refugees telegram telegram-bot telegrambots uahelp ukraine volunteer-opportunities volunteers

wiki-telegram-bot's People

Contributors

dmitry-weirdo avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

sggua

wiki-telegram-bot's Issues

Локализация сообщений ботов

  • Сейчас все сообщения выдаются исключительно на русском и берутся из хард-кода.
  • Нужно перенести это в ресурсы.
    • С передачей параметров вроде ${bot.botName} $commandText
      • ❓ А можно ли передавать именнованные, а не порядковые параметры? Возможно, нужно использовать не стандартные ResourceBundle, а некую стороннюю библиотеку.
  • Бот должен уметь в рантайме переключать язык специальной админской командой.
    • В идеале это надо делать початово, но тогда нужно сохранять состояние в персистентном хранилище, чтобы оно сохранялось при рестартах ботов.
      • ❗Это в отдельную задачу, так как помимо сложности, это будет добавлять дополнительную стоимость в инфраструктуру.
  • Что нужно переводить:
    • Описания команд.
    • Результаты команд.
    • ❓То, что сейчас в настраиваемых параметрах, и так уже является настраиваемым.

Генерализовать получение данных из разных вкладок конфига

Завожу письменную задачу, потому что надо подумать на бумажке :)

Логика получения ответа

Сейчас логика получения такая и жёстко задана в коде:

  • Если сообщение не для бота, оно игнорируется
  • Если обнаружена специальная команда (начинающаяся со / + вызвал админ бота) — возвращается ответ на спецкоманду
  • С одной вкладки команд — если найдены ответы с вкладки команд — возвращается этот ответ.
    • Если найдено несколько ответов на одной и той же вкладке команд — возвращаются все ответы в одном списке.
  • С 3 захардкоженных вкладок чатов и страниц вики — собираются все ответы со всех вкладок в один ответ.
    • Захардкожены не названия вкладок, а само то, что это именно есть вкладки страниц, городских чатов, страновых чатов.

Что нужно оставить

  • Вкладки команд перегружают ответы — это даёт возможность перегружать, например, чаты, или страницы вики по тем же ключевым словам.
    • Можно сделать конфигурационным флагом, но неприоритетно.

Что хочется поменять

  • Сделать набор вкладок конфигурируемым для каждого бота.
  • Какие вкладки должен брать бот, а какие нет.
    • Это позволить исключать нежелаемые ответы поботно (вдруг кто-то не хочет выдавать страницы вики, например).
  • Получить возможность сделать "общую вкладку команд" для всех ботов.
    • Чтобы заводить общие ответы типа "Привет" итд.
  • ❓ А как просто и понятно задавать приоритеты вкладок? Или просто оставить "вкл/выкл" вкладок?
    • Задаём имена командных вкладок в массиве, ищем по порядку в массиве.
      • Но оверрайд по-прежнему непонятен. Когда нашёлся ответ на более ранней вкладке, нужно ли искать на следующей или нет? И как это задавать.
        • Видимо, берём с первой найденной вкладки команд. Чтобы иметь возможность перегрузить дефолтный "привет" на кастомный поботный.
  • Хорошо бы сделать изменение командных вкладок (или вообще конфига вкладок) в рантайме.
    • Если это JSON, то админы должны уметь его редактировать.
  • Добавить админскую команду получения JSON-овского конфига,
    • Выдаётся конфиг только текущего бота.
    • Естественно, скрываются тайные поля (вроде доступа к гугло-щиту и токена бота).
  • В ReloadFromGoogleSheet в результате должны выдаваться все вкладки (или вообще весь JSON-конфиг по вкладкам). Сейчас выдаётся только одна командная вкладка.

Типы формата вкладок

Типы формата вкладок фактически делятся на:

  • Страницы вики — название страницы + урл страницы + ключевые слова
  • Чаты — город/страна + ключевые слова + много столбцов чатов
    • Формат чатов для городов Германии и стран/других городов совпадает.
  • Команды — ответ + ключевые слова
  • ❓ Какой формат будет у вкладки с видео с UAHelp
    • Нужны ли там отдельные столбцы для того же видео на Ютьюбе и ТикТоке?
    • Формат вроде бы такой же, как у команд.

Придумать, как архивировать конфиги бота

  • Сейчас ситуация с совместным редактированием потенциально хрупкая.
  • Идея: Дать возможность загрузить конфиг бота в JSON как файл, специальной командой
  • Как-то нужно периодически архивировать конфиги, чтобы иметь какую-никакую возможность бэкапа.

Множественные имена (алиасы) для одной и той же админской команды

Приоритет низкий.

Чтобы команду можно было запускать не только через /gs-reload-5150, но и через "нормальное" имя вроде /reloadCommands или типа того.

Аналогично с /chatInfo + /getChatInfo, etc, чтобы были имена команд с начальным глаголом или без.

Логгирование всех запросов

  • Основное описание задачи см. в Трелло — https://trello.com/c/rc6ALiyA/159-%D0%B1%D0%BE%D1%82-%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2.
  • ❗Подумать о том, чтобы не сохранять First name и Last name юзера.
    • Имя и фамилия также могут быть в данных чата, если это личка с ботом (т.е. чат типа private).
    • Возможно, сделать опцией конфига, сохранять или не сохранять.
  • Скорее всего опцией: сохранять ли в логе response (aka responseText)
    • это может быть большой ответ.
      • Особенно из специальных команд вроде /allBotsGetSuccessfulRequests.
    • есть админский абьюз с тем, чтобы вызывать команду одну за другой и тем самым создавать цикл из /getLastMessageLog с кратно увеличивающимся response.

Turn on GitHub CodeQL for Kotlin

В личке бот должен отвечать и без упоминания его имени в сообщении

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.