Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BotKit by Fedify:誰でも簡単に作れるActivityPubボット

BotKit by Fedify:誰でも簡単に作れるActivityPubボット

BotKit by Fedifyの紹介資料です。

BotKitは、ActivityPubボットを簡単に作ることができるTypeScriptフレームワークです。従来のMastodon・Misskey APIを使ったボットとは異なり、ActivityPubを直接実装する独立型ボットを数行のコードで作成できます。

OSC 2025 京都での発表資料として作成しました。

🔗 ドキュメント:https://botkit.fedify.dev/
🔗 ソースコード:https://github.com/fedify-dev/botkit

Avatar for Hong Minhee (洪 民憙)

Hong Minhee (洪 民憙)

August 03, 2025
Tweet

More Decks by Hong Minhee (洪 民憙)

Other Decks in Technology

Transcript

  1. ߑຽጣ ϗϯ ϛϯ ώ w ؖࠃι΢ϧग़਎ w ϑΣσΟόʔεؔ࿈ͷιϑτ΢ΣΞΛ੍࡞ w 'FEJGZ)PMMP#PU,JU)BDLFST1VC

    w ೔ຊޠ͸·ͩษڧதͳͷͰɺΑΖ͓͘͠ئ͍͠·͢ w (JU)VCɿ!EBIMJB w ϑΣσΟόʔεɿ!IPOHNJOIFF!IPMMPTPDJBM!IPOHNJOIFF!IBDLFSTQVC
  2. جຊϘοτ࡞੒ ʢ෼Ͱʂʣ import { createBot, text } from "@fedify/botkit"; const

    bot = createBot<void>({ username: "greetbot", name: "ѫࡰϘοτ", summary: text`ͥΥͽͳ΁ĈBotKit͹ᥭ͵ͱϡψύ͹ͫg`, kv: new MemoryKvStore(), }); export default bot; / / deno serve͹࣮ͫ͢ḝĈ
  3. Πϕϯτॲཧ / / Ϛήϲ ー ͧΞͱᙉ΀ରԠ bot.onFollow = async (session,

    followRequest) = > { await followRequest.accept(); await session.publish( text`Ϛήϲ ー ͔Μ͞ͺ͖ͦͨ͘ΐͫf${followRequest.follower}ͧΥĈ`, { visibility: "direct" } ); }; / / ϦϸμϬϸͧΞͱᙉ΀ରԠ bot.onMention = async (session, message) = > { await message.like(); await message.reply(text`ͥΥͽͳ΁f${message.actor}ͧΥĈ`); };
  4. #PU,JUͰૹड৴Ͱ͖ΔΠϯλϥΫγϣϯҰཡ #PU,JUͰ΍ΓऔΓͰ͖ΔΠϯλϥΫγϣϯ͸ɺ࣍ͷͱ͓ΓͰ͢ Πϕϯτϋϯυϥʔ ϝιου Bot.onFollow Session.follow() Bot.onUnfollow Session.unfollow() Bot.onAcceptFollow FollowRequest.accept()

    Bot.onRejectFollow FollowRequest.reject() Bot.onReply Message.reply() Bot.onQuote Session.publish( . . . , { quoteTarget }) Bot.onMention Session.publish(text`${actor} . . . `)
  5. #PU,JUͰૹड৴Ͱ͖ΔΠϯλϥΫγϣϯҰཡ #PU,JUͰ΍ΓऔΓͰ͖ΔΠϯλϥΫγϣϯ͸ɺ࣍ͷͱ͓ΓͰ͢ Πϕϯτϋϯυϥʔ ϝιου Bot.onMessage Session.publish() Bot.onSharedMessage Message.share() Bot.onLike Message.like()

    Bot.onUnlike AuthorizedLike.unlike() Bot.onReact Message.react() Bot.onUnreact AuthorizedReaction.unreact() Bot.onVote Session.publish( . . . , { poll })
  6. ߴ౓ͳػೳ / / ΰξτϥֆየᥙΤᄐ࿥ const emojis = bot.addCustomEmojis({ botkit: {

    f i le: "./botkit.png", type: "image/png" } }); / / ᨷ࿴ᴬລ + ᥦხᒵ᩹ setInterval(async () = > { const session = bot.getSession("https: / / mybot.com"); const message = await session.publish( text`ຖ࣌ؒ͝ѫࡰʂ ${customEmoji(emojis.botkit)}` ); / / 30᰽ἦͽᥦხᒵ᩹ setTimeout(() = > message.delete(), 30000); }, 1000 * 60 * 60);