axiy_bot 0.2.0 copy "axiy_bot: ^0.2.0" to clipboard
axiy_bot: ^0.2.0 copied to clipboard

Write bots for the Axiy messenger in plain Dart: receive messages and button presses, send replies with inline and reply keyboards, and run Mini Apps.

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.
  • initData sukut bo'yicha 1 soat ishonchli (maxAge bilan o'zgartiriladi). Bir nusxani qayta yuborishni (replay) taqiqlash uchun bitta InitDataReplayGuard() yarating va uni faqat sahifa initDatani serveringizning o'z seansi yoki tokeniga almashtiradigan so'rovda bering: bot.checkInitData(initData, replayGuard: guard). Shunda har nonce faqat bir marta qabul qilinadi. Sahifa initDatani har so'rov bilan yuborsa, guard'ni har tekshiruvga bermang: ikkinchi so'rovdan boshlab null qaytadi.
  • Guard nonceni auth_datedan keyin 24 soat eslab qoladi (InitDataReplayGuard(keepFor: …)). Undan uzun maxAge bilan tekshirilsa, ArgumentError chiqadi.

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.

0
likes
150
points
89
downloads

Documentation

API reference

Publisher

verified publisheraxiy.uz

Weekly Downloads

Write bots for the Axiy messenger in plain Dart: receive messages and button presses, send replies with inline and reply keyboards, and run Mini Apps.

Homepage

Topics

#bot #chatbot #messenger #axiy

License

MIT (license)

Dependencies

args, cryptography, spacetimedb

More

Packages that depend on axiy_bot