Библиотека ботов общего назначения, вдохновленная Hubot, но написанная на Go.
joe — это библиотека, используемая для написания чат-ботов на языке программирования Go. Он во многом вдохновлен потрясающей средой Hubot, разработанной ребятами из Github, и предоставляет свои возможности людям, которые хотят реализовать чат-ботов с помощью Go.
joe — это программная библиотека, упакованная как модуль Go. Вы можете получить его через:
go get github.com/go- joe / joe
Вы можете найти все примеры кода, дополнительные пояснения и полные рецепты на https://joe-bot.net.
Каждый бот состоит из адаптера чата (например, для интеграции со Slack), реализации памяти для запоминания данных «ключ-значение» (например, с использованием Redis) и мозга , который маршрутизирует новые сообщения или пользовательские события (например, получение HTTP-вызова) соответствующему зарегистрированному функции обработчика .
По умолчанию joe .New(…)
использует адаптер CLI, который заставляет бота читать сообщения со стандартного ввода и отвечать на стандартный вывод. Кроме того, бот будет хранить данные значений ключей в памяти, что означает, что он забудет все, что вы ему сказали, при перезапуске. Эта настройка по умолчанию полезна для локальной разработки без каких-либо зависимостей, но вам быстро захочется добавить другие модули , чтобы расширить возможности ботов.
В следующем примере бот подсоединяется к рабочей области Slack и сохраняется данные «ключ-значение» в Redis. Чтобы позволить обработчикам сообщений получать доступ к памяти, мы определяем их как функции пользовательского типа ExampleBot
, в который встроен joe .Bot
.
package main
import (
"fmt"
"github.com/go- joe / joe "
"github.com/go- joe /redis-memory"
"github.com/go- joe /slack-adapter/v2"
)
type ExampleBot struct {
* joe . Bot
}
func main () {
b := & ExampleBot {
Bot : joe . New ( "example" ,
redis . Memory ( "localhost:6379" ),
slack . Adapter ( "xoxb-1452345…" ),
),
}
b . Respond ( "remember (.+) is (.+)" , b . Remember )
b . Respond ( "what is (.+)" , b . WhatIs )
err := b . Run ()
if err != nil {
b . Logger . Fatal ( err . Error ())
}
}
func ( b * ExampleBot ) Remember ( msg joe . Message ) error {
key , value := msg . Matches [ 0 ], msg . Matches [ 1 ]
msg . Respond ( "OK, I'll remember %s is %s" , key , value )
return b . Store . Set ( key , value )
}
func ( b * ExampleBot ) WhatIs ( msg joe . Message ) error {
key := msg . Matches [ 0 ]
var value string
ok , err := b . Store . Get ( key , & value )
if err != nil {
return fmt . Errorf ( "failed to retrieve key %q from brain: %w" , key , err )
}
if ok {
msg . Respond ( "%s is %s" , key , value )
} else {
msg . Respond ( "I do not remember %q" , key )
}
return nil
}
joe поставляется без сторонних модулей, таких как интеграция с Redis, чтобы избежать использования большего количества зависимостей, чем вам действительно нужно. Однако уже есть некоторые модули, которые вы можете использовать напрямую, чтобы расширить функциональность вашего бота, не написав слишком много кода самостоятельно.
Если вы написали модуль и хотите поделиться им, добавьте его в этот список и откройте запрос на включение.
Пожалуйста, прочтите CONTRIBUTING.md для получения подробной информации о нашем кодексе поведения и о процессе отправки запросов на включение в этот репозиторий.
ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСЕ ЕЩЕ НАХОДИТСЯ В АЛЬФА-ВЕРСИИ, И ГАРАНТИЙ СТАБИЛЬНОСТИ API ПОКА НЕТ.
Все существенные (например, критические) изменения документируются в CHANGELOG.md.
После выпуска версии 1.0 мы планируем использовать SemVer для управления версиями. Доступные версии см. в тегах этого репозитория.
См. также список участников, принявших участие в этом проекте.
Этот проект лицензируется по лицензии BSD-3-Clause — подробности см. в файле ЛИЦЕНЗИИ.