unam3 / trial-bot-all Goto Github PK
View Code? Open in Web Editor NEWtrial-bot-all: Vkontakte and Telegram bot
License: BSD 3-Clause "New" or "Revised" License
trial-bot-all: Vkontakte and Telegram bot
License: BSD 3-Clause "New" or "Revised" License
[Tg] Only latest text message (from updates) will be processed.
Если будет большая нагрузка на бота, за раз будет получаться много сообщений от разных пользователей и 90% будет просто игнорироваться. Надо пофиксить чтобы каждое сообщение обрабатывалось
https://rizzoma.com/topic/c27faf1cfa188c1120f59af4c35e6099/0_b_9n8n_8jl2r/
Весь код проверен через hlint и не вызывает ни одного варнинга.
Сейчас Config
телеги (который, вообще-то стейт)
data Config =
Config
{ tokenSection :: TokenSection
, helpMessage :: HelpMessage
, repeatMessage :: RepeatMessage
, numberOfRepeats :: NumberOfRepeats
, numberOfRepeatsMap :: NumberOfRepeatsMap
}
содержит в себе два типа полей: статические, которые не меняются во время выполнения: repeatMessage
, helpMessage
, tokenSection
, NumberOfRepeats
. И динамический numbersOfRepeatsMap
. Совмещать в одном типе данных две разные штуки -- стейт и статическое окружение не стоит, если в этом нет необходимости.
Обычно для хранения окружения используют ReaderT
, а для состояния либо StateT
либо в ридер кладут MVar
, TVar
или IORef
, но можно и просто передавать аргументом ф-ии
Тоже самое относится к "конфигу" вк
wixe@thinkpad /tmp/trial-bot-all$ stack build --fast
Error: While constructing the build plan, the following exceptions we
In the dependencies for trial-bot-all-0.1.0.0:
bytestring-0.10.10.1 from stack configuration does not match ==0.
is 0.10.10.0)
needed since trial-bot-all is a build target.
Some different approaches to resolving this:
* Set 'allow-newer: true'
in /home/wixe/.stack/config.yaml to ignore all version constraint
* Recommended action: try adding the following to your extra-deps i
- bytestring-0.10.10.0@sha256:6031d86e4fd6419ad2ea05ecc008188dd64ed6c
Plan construction failed.
Сейчас некоторые функции имеют очень большой уровень вложенности, из-за чего сложно понимать что эти функции из себя представляют. Поскольку код в первую очередь пишется для людей нужно представлять как бы другой человек смог разобраться в написанной функции, и уменьшать сложность кода.
Для уменьшения сложности есть следующие подходы:
filter
, map
, foldr
(есть также для списков с эффектами аналоги). Не стоит использовать рекурсию, а вместо этого лучше выразить то же через стандартные функции. Поскольку каждый их встречал и использовал, читающему будет легче понять смысл функции. Заметил подобный код в Telegram.HandleUpdates.handleUpdates
.Из дока
В ответ на запрос сервер может вернуть одну из ошибок:
{"failed":1,"ts":30}
{"failed":2}
{"failed":3}
"failed":1 — история событий устарела или была частично утеряна, приложение может получать события далее, используя новое значение ts из ответа.
"failed":2 — истекло время действия ключа, нужно заново получить key методом groups.getLongPollServer.
"failed":3 — информация утрачена, нужно запросить новые key и ts методом groups.getLongPollServer.
Обратите внимание, объекты в сообщении об ошибке могут содержат поля, не описанные в документации. Их необходимо игнорировать и не пытаться обработать.
По хорошему эти кейсы надо обрабатывать
fromJust
. В случае init
, head
лучше использовать деконструкцию спискаExceptT
, catch
/try
, явный возврат Maybe
/Just
. Каждую ошибку хорошо бы логгировать в собственном логгере с уровнем errorA declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.