BotKit: ربات فدیورسِ خودت رو تو یه فایل بساز
خلاصهٔ کاملتر
تو صفحهٔ معرفی BotKit اومده که این فریمورک TypeScript از تیم Fedify، رباتهای ActivityPub رو بهشکل سرور مستقل بالا میآره: نه اکانت ماستودون لازمه، نه محدودیت ۵۰۰ کاراکتر، و کل ربات تو یه فایل جا میشه. نصبش هم با deno add jsr:@fedify/botkit انجام میشه.
تفاوت اصلیش با اتوماسیون اکانت همینه. تو روش معمول، یه اسکریپت با اکسستوکن یه اکانت روی سرور ماستودون یا میسکی رو میچرخونه و به دیتابیس و محدودیتهای همون پلتفرم بستهست. تو BotKit، ربات یه اکتور ActivityPub روی دامنهٔ خودته با استوریج، صف و قواعد پیام خودت — و باز هم با ماستودون، میسکی و بقیهٔ فدیورس در ارتباطه.
رویدادها فقط تابع async هستن که به ربات وصل میکنی: منشن، ریپلای، فالو و آنفالو، کوت، رأی نظرسنجی و واکنش ایموجی. هر هندلر یه session میگیره، پس میتونه جواب بده، پست منتشر کنه یا واکنش بذاره:
bot.onMention = async (session, message) => {
await message.reply(text`It's 18°C with clear skies in Seoul.`);
};محتوای پیام با تمپلیت text ساخته میشه که HTML رو خودش escape میکنه و منشن، هشتگ، لینک و ایموجی سفارشی رو میشناسه. میتونی عکس ضمیمه کنی، نظرسنجی باز کنی، واکنش ایموجی جمع کنی و برای کوتپست سیاست رضایت (FEP-044f) بذاری؛ visibility هر پست هم دست خودته و بعداً میتونی ویرایش یا حذفش کنی.
یه نکتهٔ جالبش تایپمحور بودنشه: تایپِ context اپت رو یه بار به BotKit میدی و همون تایپ تو session، هندلرها و سازندهٔ پیام دنبالت میآد، پس دادهٔ ناهمخوان یا آپشن اشتباهِ پیام قبل از اینکه به دست سرور فدیورس برسه، سر کامپایل گیر میافته.
اگه به بیشتر از یه ربات احتیاج داری، createInstance زیرساخت مشترک — کیولیو استور، صف، ریپازیتوری و هندل کردن HTTP — رو نگه میداره و هر ربات اکتور و هندل و هندلرهای خودش رو داره. رباتها رو هم میتونی از اول تعریف کنی یا از دیتابیس بخونی.
نکات کلیدی:
- ربات یه سرور کامل ActivityPub روی دامنهٔ خودته، نه اسکریپتی روی اکانت ماستودون
- بدون محدودیت ۵۰۰ کاراکتری و قواعد پلتفرم؛ استوریج و صف و کد خودت
- رویدادها تابع async سادهان: منشن، ریپلای، فالو، کوت، رأی و واکنش ایموجی
- تمپلیت text خروجی رو escape میکنه و منشن و هشتگ و لینک میسازه
- با createInstance چند ربات روی یه سرور و زیرساخت مشترک بالا میآد




