Giter VIP home page Giter VIP logo

ninebot's Introduction

nineBot

telegram bot that parses media from 9gag and vk posts

uses haskell-tdlib

Build

  • put prebuilt tdlib library in the lib folder
  • stack build

ninebot's People

Contributors

mejgun avatar

Watchers

 avatar

ninebot's Issues

Не бидится проект

image

Требует установить tdjson. Все сторонние билиотеки, которые не ставятся автоматически, когда запускаешь stack build нужно указать в Readme, чтобы упростить и ускорить поднятие проекта. Если это возможно указать ссылку на то, как установить сторонний пакет или команду для установки.

Сделать бизнес-логику чистой

То есть, сделать монаду в функциях основной логики полиморфнойю Это позволит тестировать функции, подменяя настоящие данные моковыми.

Инстансы для FromJSON

Тут мне не понятно что происходит,

image

Написан инстанс для Title, значит parseJson должен принимать уже сам объект title, ну или строку title, а там еще другие поля откуда-то. Или там в json и есть объект Title, у которого описаны поля data, post, title?

По всем инстансам ниже тот же вопрос. Было бы круто, если бы ты прикрепил к тому ишью пример json-а, который будет парситься с помощью этих инстансов

Переименовать тип данных State

Лучше не использовать такие названия, потому что они могут запутать. Например на какое-то время можно зависнуть , встретив где-то в коде и подумав что это State монада. Плюс недостаточно инфы, например чей стэйт или для чего стэйт. Ну и в итоге не понятно что именно описывают рекорды:

image

например currentExtra что такое и зачем? И кстати, много где встречается название extra, может его как-то можно переименовать, чтобы было понятней, что это такое:)

Добавить еще одного бота

В задании по карте обучения не случайно требуется сделать 2 бота: мы хотели чтобы стажеры научились применять знания по полиморфизму, написав общие функции для взаимодействия с разными ботами. Тут и архитектуру понадобится спроектировать, что тоже учитывается в стажерском задании.

Читать настройки из конфига

Никакие значения не нужно харкодить, это усложняет поиск ошибок и в случае если мы захотим поменять значения нужно будет лезть в код.

  • Если значение константное, можно сделать файл с константами и складывать туда;
  • Если это настройка, надо сделать файлы конфигурации и читать значения оттуда (можно использовать Data.Configurator или Aeson для парсинга файла конфигурации)

Токен через getLine вводить это жестко. Лучше один раз написать его в файл конфига и всегда читать оттуда.

Пример хардкода:

send c CheckDatabaseEncryptionKey { encryption_key = Just "randomencryption" }

Отрефакторить модуль Main

Оставить там только функцию main, остальное раскидать смыслу по разным модулям, например так:

Тип State и функция emptyState должны лежать в одном файле, по сути это модель (1 доменный объект), и функция, работающая с ней.

Хэндлеры тоже разбросать по файлам, например сделать директорию Handlers и сложить их туда.

Функции, которые общаются с апи мессенджера, тоже разнести по файлам и в отдельную директорию.

И тд. в том же ключе.

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.