ไลบรารีบอทอเนกประสงค์ที่ได้รับแรงบันดาลใจจาก Hubot แต่เขียนด้วยภาษา Go
joe เป็นไลบรารีที่ใช้เขียนแชทบอทในภาษาโปรแกรม Go ได้รับแรงบันดาลใจอย่างมากจากเฟรมเวิร์ก Hubot ที่ยอดเยี่ยมที่พัฒนาโดยทีมงานที่ Github และนำพลังของมันมาสู่ผู้ที่ต้องการใช้งานแชทบอทโดยใช้ Go
joe เป็นไลบรารีซอฟต์แวร์ที่บรรจุเป็นโมดูล Go คุณสามารถรับมันผ่านทาง:
go get github.com/go- joe / joe
คุณสามารถดูตัวอย่างโค้ดทั้งหมด คำอธิบายเพิ่มเติม และสูตรอาหารทั้งหมดได้ที่ https://joe-bot.net
บอทแต่ละตัวประกอบด้วย Chat Adapter (เช่น เพื่อทำงานร่วมกับ Slack) การใช้งาน หน่วยความจำ เพื่อจดจำข้อมูลคีย์-ค่า (เช่น การใช้ Redis) และ Brain ซึ่งกำหนดเส้นทางข้อความใหม่หรือเหตุการณ์ที่กำหนดเอง (เช่น การรับการเรียก HTTP) ไปยังที่ลงทะเบียนที่เกี่ยวข้อง ฟังก์ชัน ตัวจัดการ
ตามค่าเริ่มต้น joe .New(…)
จะใช้อะแดปเตอร์ CLI ซึ่งทำให้บอทอ่านข้อความจาก stdin และตอบกลับบน stdout นอกจากนี้ บอทจะจัดเก็บข้อมูลค่าคีย์ไว้ในหน่วยความจำ ซึ่งหมายความว่ามันจะลืมทุกสิ่งที่คุณบอกเมื่อรีสตาร์ท การตั้งค่าเริ่มต้นนี้มีประโยชน์สำหรับการพัฒนาในพื้นที่โดยไม่ต้องพึ่งพาใดๆ แต่คุณจะต้องการเพิ่ม โมดูล อื่นๆ อย่างรวดเร็วเพื่อขยายขีดความสามารถของบอท
ตัวอย่างต่อไปนี้เชื่อมต่อ Bot กับพื้นที่ทำงาน 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 เพื่อดูรายละเอียดเกี่ยวกับจรรยาบรรณของเราและกระบวนการส่งคำขอดึงไปยังพื้นที่เก็บข้อมูลนี้
ซอฟต์แวร์นี้ยังอยู่ใน ALPHA และยังไม่มีการรับประกันเกี่ยวกับความเสถียรของ API
การเปลี่ยนแปลงที่สำคัญทั้งหมด (เช่น การทำลายล้าง) ได้รับการบันทึกไว้ใน CHANGELOG.md
หลังจากการเปิดตัว v1.0 เราวางแผนที่จะใช้ SemVer สำหรับการกำหนดเวอร์ชัน สำหรับเวอร์ชันที่มี โปรดดูแท็กบนที่เก็บนี้
ดูรายชื่อผู้ร่วมให้ข้อมูลที่เข้าร่วมโครงการนี้ด้วย
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต BSD-3-Clause - ดูรายละเอียดในไฟล์ใบอนุญาต