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
- Axiy ilovasida: Sozlamalar → "Mening botlarim" → "Bot yaratish".
- Ism va
botbilan tugaydigan foydalanuvchi nomini tanlang (masalandokon_bot). Bot veb ilova ochadigan bo'lsa, "Mini App"ni yoqing. - 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.requestContactvaReplyButton.requestLocationkontakt 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_botkabi buyruqlarni o'qiydi; guruhda boshqa botga atalgan buyruq uchunnullqaytaradi.
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
sendDatabilan yuborganibot.webAppDataga keladi;data.fromId— uni haqiqatan kim yuborgani. bot.cloudStorageOf(user)— sahifaning shu foydalanuvchi uchun saqlagan qiymatlari.- Sahifa o'z serveringizga
initDatayuborsa, uniawait bot.checkInitData(initData)bilan tekshiring:WebAppUser(sahifani kim ochgani) yoki ishonib bo'lmasanullqaytaradi. Botsiz serverdaverifyInitDatafunksiyasidan foydalaning; kalitnidart run axiy_bot:public_key --token <token>chiqarib beradi. initDatasukut bo'yicha 1 soat ishonchli (maxAgebilan o'zgartiriladi). Bir nusxani qayta yuborishni (replay) taqiqlash uchun bittaInitDataReplayGuard()yarating va uni faqat sahifainitDatani serveringizning o'z seansi yoki tokeniga almashtiradigan so'rovda bering:bot.checkInitData(initData, replayGuard: guard). Shunda harnoncefaqat bir marta qabul qilinadi. SahifainitDatani har so'rov bilan yuborsa, guard'ni har tekshiruvga bermang: ikkinchi so'rovdan boshlabnullqaytadi.- Guard
nonceniauth_datedan keyin 24 soat eslab qoladi (InitDataReplayGuard(keepFor: …)). Undan uzunmaxAgebilan tekshirilsa,ArgumentErrorchiqadi.
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.