Go botni Botxonaga joylash (go-telegram/bot)
go-telegram/bot — Go uchun zamonaviy, bog'liqliksiz Telegram bot kutubxonasi. Botxona bilan ishlashi uchun hech qanday maxsus sozlama shart emas — Telegram so'rovlari avtomatik platforma proksisi orqali o'tadi, WithServerURL kerak emas. Tayyor boshlang'ich loyiha: Go shabloni.
Qadamlar
1. Bot'ni yarating
package main
import (
"context"
"os"
"os/signal"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
)
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
b, err := bot.New(os.Getenv("BOT_TOKEN"),
bot.WithDefaultHandler(func(ctx context.Context, b *bot.Bot, u *models.Update) {
if u.Message == nil {
return
}
b.SendMessage(ctx, &bot.SendMessageParams{
ChatID: u.Message.Chat.ID,
Text: "Salom! Men ishlayapman.",
})
}),
)
if err != nil {
panic(err)
}
b.Start(ctx) // long polling
}
Boshqa kutubxonalar (gopkg.in/telebot.v3, go-telegram-bot-api/v5) uchun ham odatiy sozlamalar yetarli — API manzilini o'zgartirish shart emas. Batafsil: 6 standart qoida.
2. DATA_DIR'dan foydalaning
dataDir := os.Getenv("DATA_DIR")
if dataDir == "" {
dataDir = "./data"
}
os.MkdirAll(dataDir, 0o755)
dbPath := filepath.Join(dataDir, "bot.sqlite3")
3. go.mod va go.sum
module mening-botim
go 1.27
require github.com/go-telegram/bot v1.27.0
Versiyalar go.modda aniq yozilgan bo'lsin va go.sum ham arxivga qo'shilsin — go.sum yo'q bo'lsa ogohlantirish chiqadi (build go mod tidy ni o'zi ishga tushiradi). go.moddagi go/toolchain satri hisobga olinadi.
4. Kirish nuqtasi
Botxona loyiha ildizidagi main paketni (main.go) yoki aynan bitta cmd/<nom>/ papkasini topadi. Boshqacha tuzilma bo'lsa, botxona.yaml qo'shing (kirish nuqtasi qoidasi):
runtime: go
entry: ./cmd/bot
5. .env.example va yuklash
Botingizga xos sozlamalarni .env.exampleda hujjatlashtirib, papkani ZIP qiling (vendor/ va tayyor binar fayllarni qo'shmang — loyiha Botxonaning o'zida build qilinadi, batafsil) va panelga yuklang.
6. Tekshiruv va sinov
Natijani shu yerda tushunib, sinov rejimida Telegram'da tekshiring.
Build qanday ishlaydi
Bot CGO_ENABLED=0 bilan (golang:1.27-alpine) statik binar qilib build qilinadi va ca-certificates hamda tzdata o'rnatilgan alpine'da ishga tushadi. Shuning uchun cgo talab qiladigan kutubxonalar ishlamaydi.
SQLite kerak bo'lsa
github.com/mattn/go-sqlite3 cgo ishlatadi — Botxonada ishlamaydi. O'rniga toza Go'dagi modernc.org/sqlite ni ishlating:
import (
"database/sql"
_ "modernc.org/sqlite"
)
db, err := sql.Open("sqlite", dbPath)
time.NewTicker yoki cron bilan rejalashtirish
Kunlik xabar yoki eslatma uchun time.NewTicker, time.Tick(, robfig/cron yoki go-co-op/gocron ishlatilsa, Botxona buni aniqlab botni doim yoniq holatga o'tkazadi. Batafsil: Uxlash va uyg'onish.
Tez-tez uchraydigan xatolar
401 Unauthorized— token noto'g'ri, Token olish sahifasini ko'ring.go: ... missing go.sum entry—go.sumarxivga qo'shilmagan; lokaldago mod tidyishga tushirib,go.sumni qo'shing.Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo—mattn/go-sqlite3nimodernc.org/sqlitega almashtiring.- Kirish nuqtasi topilmadi —
mainpaket ildizda emas va bir nechtacmd/papka bor:botxona.yamlgaentry: ./cmd/botyozing.
AI yordamida tezroq
Kodingizni Promptlar kutubxonasidagi tayyor topshiriq bilan AI'ga berib, avtomatik Botxona standartlariga moslatishingiz mumkin.