บอทหย่อนนี้ช่วยปรับปรุงเวิร์กโฟลว์ของทีมพัฒนา โดยเฉพาะอย่างยิ่งด้วยการมุ่งเน้นไปที่เจนกินส์, GitHub, Gitlab และ Jira เนื่องจากการรวมกำลังทำงานนอกกรอบ แต่ยังสามารถใช้คำสั่งที่กำหนดเองมาโคร, crons และคำสั่งเฉพาะโครงการอื่น ๆ สามารถนำไปใช้ในวิธีที่ง่ายและยืดหยุ่น
_metadata :
major_version : 1
minor_version : 1
display_information :
name : slack_bot
background_color : " #382e38 "
features :
app_home :
messages_tab_enabled : true
messages_tab_read_only_enabled : false
bot_user :
display_name : bot
always_online : true
oauth_config :
scopes :
bot :
- app_mentions:read
- channels:read
- channels:history
- groups:history
- chat:write
- im:history
- im:write
- mpim:history
- reactions:read
- reactions:write
- users:read
- files:read
- pins:write
settings :
event_subscriptions :
bot_events :
- app_mention
- message.im
interactivity :
is_enabled : true
org_deploy_enabled : false
socket_mode_enabled : true
token_rotation_enabled : false ก่อนเตรียม config.yaml เพียงแค่ดูที่ config-example.yaml
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go หรือ make run to Run the Go Application ในฐานะผู้ใช้ Slack คุณเพียงแค่ส่งข้อความส่วนตัวไปยังผู้ใช้บอท/แอพที่มีคำสั่งเพื่อดำเนินการ นอกจากนี้คุณสามารถเพิ่มบอทลงในช่องใด ๆ และเรียกใช้คำสั่ง BOT ในนั้นโดยนำหน้าคำสั่งของคุณด้วย @BOT_NAME เช่น @slack-bot start job DailyDeployment
หมายเหตุ: คุณต้องเชิญบอทเข้าสู่ช่องเพื่อให้สามารถจัดการคำสั่งได้
คำสั่ง help เพียงพิมพ์รายการคำสั่งที่มีอยู่ทั้งหมดของบอทนี้ ด้วย help *command* คุณจะได้รับคำอธิบายสั้น ๆ และตัวอย่างบางส่วนสำหรับคำสั่งเดียว

บอทสามารถเริ่มต้นและตรวจสอบงานของเจนกินส์ในวิธีที่เรียบง่าย แต่ทรงพลัง
โดยค่าเริ่มต้นคำสั่งจะไม่พร้อมใช้งานและไม่สามารถมองเห็นได้ใน "ความช่วยเหลือ" จนถึง "Jenkins.host" ถูกกำหนดไว้ในไฟล์ config
คำสั่ง start job เริ่มงานเจนกินส์และแสดงความคืบหน้าในปัจจุบัน ความสนใจ: เฉพาะงานที่ได้รับการอนุญาตในการกำหนดค่าเท่านั้น!
นอกจากนี้แต่ละงานสามารถมี trigger ที่กำหนดค่าได้ซึ่งทำให้สามารถสร้างคำสั่งที่กำหนดเองเพื่อเริ่มงาน (เป็น regexp ที่ใช้ชื่อพารามิเตอร์) เช่น "เริ่มการปรับใช้รายวัน" อาจเป็นตัวกระตุ้นสำหรับงานเจนกินส์หนึ่งงาน การส่งข้อความนี้ไปยังบอทจะเริ่มงาน
หลังจากเริ่มงานบอทจะแสดงเวลาในการสร้างโดยประมาณและปุ่มการกระทำบางอย่าง ที่นั่นคุณสามารถเปิดบันทึกหรือยกเลิกการสร้างโดยตรง
บอทยังสามารถแยกวิเคราะห์พารามิเตอร์และการค้นหาชื่อสาขาโดยใช้การค้นหาสาขาฟัซซี่
ตัวอย่าง:
trigger job DeployBetastart job BackendTests TEST-123 (ค้นหาชื่อสาขาเต็มรูปแบบที่มีการทดสอบ -123 เช่นคุณสมบัติ/test-123-added-feature-456) 

บอทยังมีความเป็นไปได้ที่จะสร้างการแจ้งเตือนครั้งเดียวสำหรับการสร้างเจนกินส์ สิ่งนี้อาจเป็นประโยชน์สำหรับงานที่ดำเนินมายาวนานซึ่งผู้พัฒนากำลังรอผล
ตัวอย่าง:
inform me about build NightlyTests (ดู Build Running ล่าสุด)inform me about build MyJobName #423 (ระบุหมายเลขบิลด์)inform job MyJobName (ไวยากรณ์ทางเลือก)รับข้อความ Slack สำหรับกระบวนการทั้งหมดสำหรับงานที่กำหนด:
ตัวอย่าง:
watch JenkinsSelfCheck แจ้งเกี่ยวกับงานสร้างงาน JenkinsSelfCheckunwatch JenkinsSelfCheckคำสั่งเล็ก ๆ เพื่อปิดการใช้งาน/เปิดใช้งานการดำเนินงานทางฝั่งเจนกินส์
ตัวอย่าง:
disable job NightlyTests (ปิดการใช้งานงานบนเจนกินส์)enable job NightlyTestsเมื่อบิลด์ล้มเหลวคุณจะสามารถลองสร้างงานสร้างได้อีกครั้งโดย:
ตัวอย่าง:
retry build NightlyTests (ลองสร้างงานสุดท้ายของงาน)retry build NightlyTests #100 (ลองใหม่ให้กับ Build) jenkins nodes แสดงรายการโหนดเจนกินส์ทั้งหมดที่มีอยู่ สถานะออนไลน์/ออฟไลน์และจำนวนผู้บริหารสามารถมองเห็นได้ 
หากคุณเพิ่งวางลิงค์ไปยัง GitHub/Gitlab/BitBucket/Stash Pull Request, Bot จะติดตามสถานะของตั๋ว!
คุณยังสามารถตั้งค่าปฏิกิริยาที่กำหนดเองได้ เช่นเพื่อดูว่าใครหรือแผนกใด/แผนกอนุมัติคำขอดึงคุณสามารถใช้ชื่อของปฏิกิริยาหรือไดเรกทอรีอักขระ Unicode
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
คุณสมบัติพิเศษ: สำหรับ bitbucket บอทสามารถแยกสถานะการสร้างปัจจุบัน (เช่นจากเจนกินส์/ไม้ไผ่ ฯลฯ ) และแสดงความล้มเหลวและวิ่งสร้าง (ปฏิกิริยาไฟ) เป็นปฏิกิริยา (ปฏิกิริยาลูกศรวงกลม) เมื่อการสร้างมีความเสถียรปฏิกิริยาการสร้างจะหายไป 
คำสั่ง queue (พร้อม then ) สามารถคิวคำสั่งที่กำหนดได้จนกว่าคำสั่งที่กำลังทำงานอยู่จะเสร็จสิ้น
ตัวอย่างสถานการณ์ต่อไปนี้: คุณมีงานสร้าง (ซึ่งอาจใช้เวลาไม่กี่นาที) และงานปรับใช้ซึ่งต้องอาศัยสิ่งประดิษฐ์สร้าง ตอนนี้คุณสามารถทำได้:
trigger job Build feature1234 เพื่อเริ่มงานสร้างด้วยสาขาที่กำหนดqueue trigger job DeployBranch feature1234queue reply Deployment is done!ตัวอย่างอื่น ๆ :
delay 1hthen send message #backend coffee time?หากต้องการดูคำสั่งพื้นหลังที่รันทั้งหมด (เช่น Jenkins Jobs หรือ PR Watcher) ใช้คำสั่งนี้:
list queueบอทสามารถสอบถามข้อมูลจากจิราไม่ว่าจะมาจากตั๋วใบเดียวหรือตั๋วทั้งหมด
โดยค่าเริ่มต้นคำสั่งจะไม่พร้อมใช้งานและไม่สามารถมองเห็นได้ใน "ความช่วยเหลือ" จนกว่าจะมีการกำหนด "jira.host" ในไฟล์ config
ตัวอย่าง
jira TEST-1234jira 1242 (เปิดตั๋วโดยใช้โครงการ JIRA เริ่มต้นที่กำหนดค่าไว้)jql type=bug and status=open (ใช้โครงการเริ่มต้นโดยค่าเริ่มต้น)jira "Second city" (การค้นหาข้อความของตั๋วในโครงการเริ่มต้น) 

นอกจากนี้ยังเป็นไปได้ที่จะได้รับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงของรัฐในตั๋วจิราบางใบ
ตัวอย่าง
watch ticket PROJ-12234เป็นไปได้ที่จะสร้างปุ่มที่กำลังดำเนินการบอทใด ๆ เมื่อกดปุ่ม ปฏิสัมพันธ์หย่อน

ตัวอย่าง:
add button "Start Deployment" "trigger job LiveDeployment"บันทึก
กำหนดค่าตัวแปรเฉพาะของผู้ใช้เพื่อปรับแต่งพฤติกรรมบอท เช่นนักพัฒนาแต่ละคนมีสภาพแวดล้อมเซิร์ฟเวอร์ของตัวเอง
ตัวอย่าง: มีการกำหนดค่าทั่วโลกนี้:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} ตอนนี้นักพัฒนาแต่ละคนสามารถโทรได้เมื่อคำสั่งนี้เช่น: set variable defaultSerer foobarX.local เพื่อลงทะเบียน "ค่าเริ่มต้น" ที่กำหนดเอง
เมื่อตอนนี้เรียก deploy mater มันจะปรับใช้สาขา master ไปยังเซิร์ฟเวอร์ foobarX.local
อีกตัวอย่าง ที่นี่เป็นเวอร์ชันขั้นสูงที่ใช้เทมเพลต Go ในท้ายที่สุดคำสั่งจะสร้างคำสั่งย่อยหนึ่งรายการเช่น: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> ซึ่งจะโพสต์ลิงก์ไปยังช่อง Slack
- name : demo
trigger : " demo (?P<ticketId> \ w+- \ d+) "
commands :
- |
{{ $ticket := jiraTicket .ticketId }}
{{ if $ticket }}
reply <!here> demo for <{{ jiraTicketUrl $ticket.Key }}|{{ $ticket.Key }}: {{ $ticket.Fields.Summary }}>
{{ else }}
reply Ticket {{ .ticketId }} not found :white_frowning_face:
{{ end }}
description : Informs the current channel about a demo of a Jira ticket. It directly posts a link to the ticket
examples :
- demo XYZ-1232 ผู้ใช้สามารถกำหนดสภาพแวดล้อมเริ่มต้นของเขาได้ครั้งเดียวโดยใช้ set variable serverEnvironment aws-02
จากนั้น deploy feature-123 จะปรับใช้สาขาไปยังสภาพแวดล้อม aws-02 ที่กำหนดไว้ ผู้ใช้แต่ละคนสามารถกำหนดตัวแปรของตัวเองได้
นอกจากนี้ยังเป็นไปได้ที่จะมี chatgpt เช่นการสนทนากับ Openai Integration (GPT3.5) อย่างเป็นทางการ!

เพียงพิมพ์ "openai" หรือ "chatgpt" ก่อนที่คำถามของคุณจะสร้างเธรดใหม่ซึ่งทำงานเหมือนหน้า Chatgpt ที่รู้จักกันดี เนื้อหาของข้อความ 10 ข้อความสุดท้ายถูกใช้เป็นบริบท เพื่อให้มันใช้งานได้จะต้องมี "openai.api_key" ที่ถูกต้องในการกำหนดค่า
Extended Config:
openai :
api_key : " sk-123....789 "
initial_system_message : " You are a Slack bot for Project XYZ, please answer shortly. "
update_interval : ' 3s ' # fewer Slack messages update during generation
model : gpt-3.5-turbo
temperature : 0.8
log_texts : true # opt in: log all input/output text to the logเมื่อใช้คำสั่ง "openai xxx" ภายในเธรดที่มีอยู่ข้อความก่อนหน้านี้จะใช้เป็นบริบทสำหรับการโทรเพิ่มเติม
นอกจากนี้ยังเป็นไปได้ที่จะใช้ฟังก์ชั่นในเทมเพลต (เช่นในคำสั่งที่กำหนดเองหรือ crons)
{{ openai "Say some short welcome words to @Jon_Doe"}} จะพิมพ์บางอย่างเช่น Hello Jon, welcome! How can I assist you today?
บอทยังสามารถสร้างภาพด้วยความช่วยเหลือของ Dall-e เพียงคำนำหน้าคุณพร้อมด้วย "Dalle" และบอทจะสร้างภาพตามข้อความของคุณ

หากคุณต้องการหยุดพักเล็ก ๆ และต้องการเล่นเกมตอบคำถามเล็ก ๆ น้อย ๆ คุณสามารถทำได้โดยเรียกคำสั่งนี้ ไม่อนุญาตให้ใช้คำถามมากกว่า 50 คำถาม คำถามมาจากหมวดหมู่ที่แตกต่างกันและระดับที่ยากและเป็นคำถามแบบปรนัยหรือคำถามจริง/เท็จ
คำสั่ง
quiz 10 เพื่อเริ่มตอบคำถามด้วย 10 คำถามanswer 1 เพื่อตอบคำถามด้วยคำตอบแรก 
เป็นไปได้ที่จะตั้งค่า OpenWeatherMap เพื่อรับข้อมูลเกี่ยวกับสภาพอากาศปัจจุบันในสถานที่ของคุณ

ตัวอย่างการกำหนดค่า:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " ผู้ใช้ทุกคนสามารถกำหนดนามแฝงคำสั่งของตัวเองได้ นี่เป็นคุณสมบัติที่มีประโยชน์เพื่อหลีกเลี่ยงการพิมพ์คำสั่งเดียวกันทุกวัน
ตัวอย่างการใช้งาน
list commands เพื่อแสดงรายการคำสั่งที่กำหนดไว้สำหรับผู้ใช้ปัจจุบันadd command 'myCommand' 'trigger job RestoreWorld 7 -> จากนั้นโทรหา myCommand ในภายหลังadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand เพื่อกระตุ้นงานเจนกินส์นี้ 
"คำสั่ง" ที่กำหนดไว้ (อดีตเรียกว่า "มาโคร") มีความมหัศจรรย์มากและสามารถกำหนดได้ในไฟล์การกำหนดค่า YAML
พวกเขามีทริกเกอร์ (นิพจน์ทั่วไป) และมีรายการคำสั่งย่อยซึ่งจะดำเนินการ พวกเขาคำนึงถึงกลุ่มพารามิเตอร์จาก Regexp ด้วย - เพื่อให้พวกเขามีความยืดหยุ่นมาก!
ตัวอย่างง่ายๆหนึ่งในการเริ่มงาน Jenkins สองงานที่มีชื่อสาขาที่กำหนดในเวลาเดียวกัน:
commands :
- name : build clients
trigger : " build clients (?P<branch>.*) "
commands :
- " reply I'll build {{ .branch }} for you "
- " trigger job BuildFrontendClient {{ .branch }} "
- " trigger job BuildMobileClient {{ .branch }} "
- " then reply done! :checkmark: " 
หมายเหตุ : ในคำสั่งคุณสามารถใช้ชุดคุณลักษณะเทมเพลตเต็มรูปแบบของ GO -> ลูป/เงื่อนไขเป็นไปได้!
นอกเหนือจากคุณสมบัติเทมเพลตปกติของ GO จำนวนคำสั่งเฉพาะบอทมีอยู่ในขอบเขตเทมเพลต
รายการของฟังก์ชั่นที่มีอยู่ทั้งหมด (พร้อมอาร์กิวเมนต์และประเภทการส่งคืน) สามารถสร้างได้โดยใช้คำสั่ง list template functions 
หมายเหตุ: ฟังก์ชั่นเทมเพลตนี้สามารถใช้ในคำสั่ง/คุณสมบัติที่แตกต่างกัน:
ด้วย retry หรือ repeat คำสั่งที่ดำเนินการล่าสุดของคุณจะถูกดำเนินการอีกครั้ง -> มีประโยชน์เมื่องานเจนกินส์ที่ล้มเหลวได้รับการแก้ไข
คำสั่งเล็ก ๆ ซึ่งอาจเป็นประโยชน์ร่วมกับคำสั่ง command หรือเป็นเบ็ดสำหรับงานของเจนกินส์
คำสั่งตัวอย่าง: delay 10m trigger job DeployWorldwide
เป็นการตอบกลับคุณจะได้รับคำสั่งเพื่อหยุดงานที่รอคิว (เช่น stop timer 123456 ) เนื่องจากทุกคนสามารถส่งคำสั่งได้คำสั่งสามารถใช้เพื่อประกาศการปรับใช้และมีข้อสงสัยการดำเนินการยังคงสามารถหยุดได้โดยทุกคน
reply และ send message เป็นคำสั่งเล็ก ๆ ที่มีประโยชน์ร่วมกับ command หรือตะขอเจนกินส์
ตัวอย่าง:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...คำสั่งง่าย ๆ หากคุณไม่สามารถตัดสินใจระหว่างตัวเลือกที่แตกต่างกันได้
ตัวอย่าง
random Pizza Pasta -> ผลิต "พิซซ่า" หรือ "พาสต้า" อย่างใดอย่างหนึ่งrandom Peter Paul Tom Jan -> ใครต้องทำเกี่ยวกับการจัดระเบียบอาหารวันนี้?config.yaml (คุณสามารถดู config.example.yaml ) คำสั่งนี้จะเริ่มต้นบอทโดยใช้ไฟล์ config.yaml ตามค่าเริ่มต้น ใช้อาร์กิวเมนต์ -config เพื่อใช้ไฟล์กำหนดค่าจากตำแหน่งอื่น
go run cmd/bot/main.go
ความสนใจ : สร้างไฟล์ config.yaml ก่อน
docker-compose up
การกำหนดค่าได้รับการจัดการผ่านไฟล์. yaml ง่าย ๆ ซึ่งจัดเก็บข้อมูลรับรองสำหรับบริการภายนอกและคำสั่งที่กำหนดเอง ฯลฯ
วิธีที่ง่ายที่สุดคือการมีไฟล์ config.yaml หนึ่งไฟล์พร้อมตัวเลือกที่จำเป็นทั้งหมดรวมอยู่แล้ว config.yaml จะถูกโหลดตามค่าเริ่มต้น นอกจากนี้ยังเป็นไปได้ที่จะแยกการกำหนดค่าออกเป็นหลายไฟล์
โครงสร้างตัวอย่างที่มีไฟล์กำหนดค่าหลายไฟล์:
secret.yaml ที่มีข้อมูลประจำตัวสำหรับบริการภายนอก (Slack, Jenkins) - สามารถจัดการได้โดย Puppet/Ansible ฯลฯjenkins.yaml ของ Jenkins Job และพารามิเตอร์ ฯลฯproject-X.yaml สำหรับทีมเฉพาะproject-Y.yaml ในการโหลดไฟล์กำหนดค่าหลายไฟล์ให้ใช้ go run cmd/bot/main.go -config /path/to/config/*.yaml ซึ่งรวมการกำหนดค่าทั้งหมดเข้าด้วยกัน
ในการเรียกใช้บอทนี้คุณต้องมี "โทเค็นบอท" สำหรับแอปพลิเคชัน Slack ของคุณ ดูส่วนการติดตั้งเกี่ยวกับวิธีการสร้างแอพที่เหมาะสมด้วยโทเค็นที่จำเป็น
เพื่อให้สามารถเริ่มต้นหรือตรวจสอบงานของเจนกินส์คุณต้องตั้งค่าโฮสต์และข้อมูลรับรองก่อน ผู้ใช้ต้องการอ่านการเข้าถึงงานและสิทธิ์ในการเรียกใช้งานสำหรับงานที่ได้รับการอนุญาตของคุณ
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretเพื่อให้สามารถเริ่มงานงานและพารามิเตอร์ของมันจะต้องกำหนดในการกำหนดค่า
งานที่ไม่มีพารามิเตอร์ใด ๆ ดูง่ายมาก:
jenkins :
jobs :
CleanupJob : จากนั้นคุณสามารถใช้ trigger job CleanupJob หรือ start job CleanupJob เพื่อเริ่มงาน มันจะแจ้งให้คุณทราบเมื่องานสำเร็จหรือล้มเหลว (รวมถึงบันทึกข้อผิดพลาด)
ถัดไปงานที่มีพารามิเตอร์สองตัว:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allงานนี้สามารถจัดการสองพารามิเตอร์:
หากคุณตั้งค่า VSC ในการกำหนดค่าคุณไม่จำเป็นต้องผ่านชื่อสาขาทั้งหมด แต่สามารถใช้การค้นหาที่คลุมเครือ
ตัวอย่าง:
start job RunTests จะเริ่ม "ทั้งหมด" กลุ่มในสาขาหลักstart job JIRA-1224 unit จะพยายามหาสาขาที่ตรงกันสำหรับหมายเลขตั๋ว (ข้อความแสดงข้อผิดพลาดหากไม่มีผลการค้นหาที่ไม่ซ้ำกัน!)ตอนนี้เป็นตัวอย่างที่ซับซ้อนมากขึ้นด้วยเวทมนตร์มากขึ้น:
jenkins :
jobs :
DeployBranch :
trigger : " deploy (?P<BRANCH>[ \ w \ -_ \ . \ /]*) to (?P<ENVIRONMENT>prod|test|dev) "
parameters :
- name : BRANCH
default : master
type : branch
- name : ENVIRONMENT
onsuccess :
- reply Tadaa : Take a look on http://{{ .ENVIRONMENT }}.example.com ทีละขั้นตอน: trigger เป็นนิพจน์ทั่วไปในการเริ่มงานซึ่งอาจมีกลุ่มที่มีชื่อ กลุ่ม regexp จะถูกจับคู่กับพารามิเตอร์งานโดยอัตโนมัติ
จากนั้นคุณสามารถใช้ deploy bugfix-1234 to test เพื่อเริ่มงาน Jenkins
หมายเหตุ: คุณสามารถเริ่มงานนี้ได้ตลอดเวลาผ่าน start job DeployBranch master trigger เป็นเพียงทางเลือก
onsuccess เป็นเบ็ดที่จะดำเนินการเมื่องานเริ่มต้นผ่านบอทนี้ นอกจากนี้ยังมี onsuccess และ onerror ยังมีอยู่ ... เช่นเพื่อส่งข้อความแสดงข้อผิดพลาดที่กำหนดเอง
เป็นไปได้ที่จะกำหนดคำสั่งเป็นระยะผ่าน crons โดยใช้ห้องสมุด Robfig/Cron
ตัวอย่างการกำหนดค่า
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " เพื่อให้สามารถแก้ไขชื่อสาขาใน Trigger Jenkins ได้ระบบ VCS สามารถกำหนดค่าได้ (ในขณะนี้เป็นเพียงการซ่อน/bitbucket)
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_nameหากไม่มีการกำหนดค่าจะไม่มีการค้นหาสาขาอัตโนมัติและพารามิเตอร์ "สาขา" จะถูกส่งผ่านไป 1: 1 ไปยังงานเจนกินส์
คุณสมบัติบางอย่างอาจไม่จำเป็นในสภาพแวดล้อมของคุณ คนส่วนใหญ่ไม่ได้ใช้งานหากไม่ได้ให้ข้อมูลรับรองเช่น Jira หรือ Bitbucket
คนอื่น ๆ สามารถปิดการใช้งานได้ผ่านการกำหนดค่า:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ มีคลาสรหัสของบอท: การเชื่อมต่อกับหย่อนการจัดการผู้ใช้การจับคู่คำสั่ง ...cmd/bot/ entry points aka main.go สำหรับบอทและเครื่องมือทดสอบ CLIcommand/ คำสั่งจริงใช้ bot.command อินเตอร์เฟส หากคุณต้องการคำสั่งใหม่ซึ่งไม่สามารถใช้งานได้ด้วยคำสั่ง "คำสั่ง" คุณต้องเขียนรหัสไป
มีแอปพลิเคชัน CLI ที่มีประโยชน์ซึ่งจำลองแอปพลิเคชัน Slack ... เพียงแชทกับคอนโซลในพื้นที่ของคุณโดยไม่ต้องเชื่อมต่อ Slack! 
make run-cli
make air เพื่อใช้ "เครื่องมือโหลด Air Auto Reload"
มีการทดสอบมากมายที่สามารถดำเนินการผ่าน:
make test
การทดสอบความครอบคลุมถูกสร้างขึ้นเพื่อสร้าง/ครอบคลุม html
make test-coverage