axiy_bot

English summary. axiy_bot lets you write bots for the Axiy messenger in plain Dart (no Flutter). Create a bot in the app (Settings → "Mening botlarim" → "Bot yaratish"), copy its token, and connect with AxiyBot.connect(token: …). The bot receives new messages, button presses and Mini App data as streams, and answers with send, reply, answer, inline and reply keyboards, a command menu and a menu button. It also verifies the initData of Mini Apps. Error messages from the server are in Uzbek. The rest of this page is in Uzbek.


Axiy messenjeri uchun botni oddiy Dart'da (Flutter'siz) yozish uchun paket. Bot — dastur boshqaradigan oddiy Axiy akkaunti; uning egasi siz bo'lasiz.

Bot yaratish

  1. Axiy ilovasida: Sozlamalar → "Mening botlarim" → "Bot yaratish".
  2. Ism va bot bilan tugaydigan foydalanuvchi nomini tanlang (masalan dokon_bot). Bot veb ilova ochadigan bo'lsa, "Mini App"ni yoqing.
  3. Ilova botning tokenini ko'rsatadi. Uni nusxalab, xavfsiz joyda saqlang: token bilan kirgan dastur shu bot nomidan ish ko'radi.

Do'kondagi ilovada yaratilgan bot asosiy serverda (AxiyServer.production), ilovaning test versiyasida yaratilgani test serverida (AxiyServer.test) ishlaydi. Bot faqat o'zi yaratilgan serverda ishlaydi.

O'rnatish

dart pub add axiy_bot

Birinchi bot

import 'package:axiy_bot/axiy_bot.dart';

Future<void> main() async {
  final bot = await AxiyBot.connect(token: '<bot tokeni>');

  bot.messages.listen((message) async {
    if (parseBotCommand(message.text)?.name == 'start') {
      await bot.send(
        message.conversationId,
        'Salom!',
        buttons: inlineKeyboard([
          [InlineButton.callback('Ha', 'yes'), InlineButton.callback("Yo'q", 'no')],
        ]),
      );
    } else {
      await bot.reply(message, 'Siz yozdingiz: ${message.text}');
    }
  });

  bot.callbacks.listen((press) => bot.answer(press, text: 'Qabul qilindi'));
}

Ilovada botni foydalanuvchi nomi bo'yicha toping va "Boshlash"ni bosing. To'liq namuna: example/main.dart.

Tokenni kodga yozmang: muhit o'zgaruvchisidan o'qing (Platform.environment['AXIY_BOT_TOKEN']).

Nima keladi

Oqim Nima
bot.messages Bot bor chatlardagi yangi xabarlar. message.text, message.fromId, message.conversationId; kontakt va joylashuv ham shu yerda.
bot.callbacks Inline tugmalarning bosilishi. press.data — tugmaga berilgan qiymat. Har biriga bot.answer bilan javob bering.
bot.webAppData Veb ilovadan sendData bilan yuborilgan ma'lumot. Ishlov bergach, bot.ackWebAppData.

Bot ishga tushgunga qadar kelgan xabarlar va bosishlar oqimga tushmaydi; webAppData esa bot o'chiq paytida kelganlarini ham beradi.

Nima qila oladi

  • send(chat, text, buttons:, replyTo:), reply(message, text) — xabar yuborish.
  • editMessage(id, text), setButtons(id, buttons), deleteMessage(id) — botning o'z xabarlarini o'zgartirish.
  • answer(press, text:, showAlert:, url:) — tugma bosishga qisqa bildirishnoma yoki oyna bilan javob.
  • setReplyKeyboard(chat, replyKeyboard([...])) — xabar maydoni ostidagi klaviatura; ReplyButton.requestContact va ReplyButton.requestLocation kontakt yoki joylashuv so'raydi. Bo'sh klaviatura uni olib tashlaydi.
  • setCommands('start - Boshlash\nhelp - Yordam') — buyruqlar menyusi.
  • typing(chat) — "yozmoqda…" holati.
  • parseBotCommand(text, botUsername:) — /start ref42, /help@dokon_bot kabi buyruqlarni o'qiydi; guruhda boshqa botga atalgan buyruq uchun null qaytaradi.

Tugmalar:

inlineKeyboard([
  [InlineButton.callback('Ha', 'yes'), InlineButton.url('Sayt', 'https://axiy.uz')],
  [InlineButton.webApp('Ochish', 'https://mening-sahifam.uz')],
]);

Server rad etsa (masalan bot juda tez yozsa), chaqiruv o'zbekcha sababli AxiyBotException tashlaydi.

Bot o'zi suhbat boshlay olmaydi: odamlar uni topib yozadi yoki guruh admini qo'shadi. Bot o'zi bor chatlardagi barcha xabarlarni ko'radi.

Mini App (veb ilova)

"Mini App" yoqilgan bot InlineButton.webApp, ReplyButton.webApp va setMenuButton(matn, url) (xabar maydoni chapidagi tugma) orqali https:// sahifani Axiy ichida ochadi.

  • Sahifa sendData bilan yuborgani bot.webAppDataga keladi; data.fromId — uni haqiqatan kim yuborgani.
  • bot.cloudStorageOf(user) — sahifaning shu foydalanuvchi uchun saqlagan qiymatlari.
  • Sahifa o'z serveringizga initData yuborsa, uni await bot.checkInitData(initData) bilan tekshiring: WebAppUser (sahifani kim ochgani) yoki ishonib bo'lmasa null qaytaradi. Botsiz serverda verifyInitData funksiyasidan foydalaning; kalitni dart run axiy_bot:public_key --token <token> chiqarib beradi.

Tayyor namuna bot

Paket ichida to'liqroq namuna bor: buyruqlar, tugmalar, pastki klaviatura va (Mini App bot uchun) veb ilova.

dart pub global activate axiy_bot
AXIY_BOT_TOKEN=<token> dart pub global run axiy_bot:example_bot --db axiy [--username dokon_bot] [--web-app https://…]

Test serveridagi bot uchun --db axiy-dev bering (u standart qiymat).

Litsenziya

MIT.

Libraries

axiy_bot
Writing an Axiy bot in plain Dart: AxiyBot connects with the bot's token and turns what reaches the bot into streams; the helpers build the JSON its reducers take. See bin/example_bot.dart and server/docs/bots.md ("Tez boshlash").