Botxona

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.sum arxivga qo'shilmagan; lokalda go mod tidy ishga tushirib, go.sum ni qo'shing.
  • Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo — mattn/go-sqlite3 ni modernc.org/sqlite ga almashtiring.
  • Kirish nuqtasi topilmadi — main paket ildizda emas va bir nechta cmd/ papka bor: botxona.yamlga entry: ./cmd/bot yozing.

AI yordamida tezroq

Kodingizni Promptlar kutubxonasidagi tayyor topshiriq bilan AI'ga berib, avtomatik Botxona standartlariga moslatishingiz mumkin.

Keyingi qadam

Bot doim ishlashi uchun va Boshqaruv paneli bo'yicha tur.