Самая простая команда - /test
, она просто отправляет жестко закодированный текст обратно. Реализовать довольно просто:
func (c context) test() {
c.bot.Send(tgbotapi.NewMessage(c.message.Chat.ID, "It works"))
}
/ экспорт
Экспорт - очень важная команда. Считаю это настолько важным, что реализовал первым. Он позволяет пользователю загружать все свои данные, хранящиеся в базе данных бота. Скажите нет привязке к поставщику.
В наши дни это действительно раздражает. Возьмите любое приложение, например, приложение для фитнес-трекера. Он отслеживает ваши пробежки и хранит ваши данные где-нибудь на телефоне или в облаке. И однажды оно перестает работать или вы решаете начать использовать другое приложение. И что ты делаешь? Как вы переносите свои данные? Обычно нет простого пути или вообще нет. Вам придется отказаться от всей своей истории и прогресса и начать заново в новом приложении.
Я не хочу этого для моих еще несуществующих пользователей. Позвольте им забрать свои данные домой, когда захотят. Вот почему у меня есть команда /export
. Просто скажите /export
боту, и он с радостью выполнит:
Для создания файла CSV я использую встроенный пакет encoding/csv
. Экспортировать все строки в файл CSV очень просто:
buffer := &bytes.Buffer{}
csv := csv.NewWriter(buffer)
// For each row
for ... {
csv.Write([]string{name, date})
}
// Flush when done (important!)
csv.Flush()
// Send
c.bot.Send(tgbotapi.NewDocumentUpload(
c.message.Chat.ID,
tgbotapi.FileBytes{
Name: "data.csv",
Bytes: buffer.Bytes()}))
/ добавить и / поскольку
Команды /add
и /since
- это хлеб с маслом этого бота. Как следует из названий, один предназначен для добавления событий, а другой - для проверки того, когда событие было добавлено в последний раз. /add
- это команда 2-в-1, как шампунь и кондиционер в одном флаконе, она отображает время перед добавлением.
/верхняя
Чтобы попрактиковаться в SQL, я добавил относительно бесполезную команду для отображения 10 наиболее регистрируемых событий.
SELECT name, COUNT(name) freq FROM events
WHERE user = <user-id>
GROUP BY name
ORDER BY freq DESC
LIMIT 10
В моем действительно тупом наборе данных это выглядит так:
Должен сказать, что пока я очень впечатлен SQL. Теоретически я знал, на что он способен. Но теперь я могу попробовать это, и это действительно здорово, как я могу просто написать простой запрос вместо того, чтобы писать кучу кода с циклами и переменными. Наверное, и более эффективно.
Что дальше
Бот становится умнее. Теперь он мог по-разному реагировать на несколько основных команд. Приближается еще больше. Я бы хотел, чтобы бот мог рисовать диаграммы и показывать некоторую статистику, например, как часто что-то происходило или распределение в течение дня / недели / месяца. Есть ли у у какие-нибудь идеи?
Если вам интересно, код доступен на GitHub. Эта версия помечена тегом day-5
.
Первоначально опубликовано на detunized.net 9 апреля 2019 г.