BotKit by Fedify :botkit:'s avatar

BotKit by Fedify :botkit:

@[email protected] · 3 following · 131 followers

:botkit: A framework for creating ActivityPub bots. Powered by :fedify: @fedify.

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

:botkit: Introducing : A framework for creating truly standalone bots!

Unlike traditional Mastodon bots, BotKit lets you build fully independent bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.

Currently -only, with Node.js & Bun support planned. Built on the robust @fedify foundation.

https://botkit.fedify.dev/

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

's web interface now supports theme customization! 🎨 You can set your preferred color theme using the pages.color option in createBot(). Here are some examples showing the same interface in different colors: "violet", "pumpkin", "azure", and "green" (default).

const bot = createBot<void>({
  // ... other options
  pages: {
    color: "violet"  // or "pumpkin", "azure", etc.
  }
});

We support all color themes from Pico CSS—including "amber", "fuchsia", "indigo", "jade", "lime", "pink", "sand", "slate", "yellow", "zinc", and more! Check out Pico CSS's Colors docs for the full list of available themes.

Which color is your favorite? 🤔

BotKit web interface in pumpkin theme, displaying Greet Bot's profile. Headers and interactive elements are styled in warm orange tones.
ALT text detailsBotKit web interface in pumpkin theme, displaying Greet Bot's profile. Headers and interactive elements are styled in warm orange tones.
Default green-themed BotKit interface displaying Greet Bot's profile. UI elements are styled in forest green colors, showing the default color scheme.
ALT text detailsDefault green-themed BotKit interface displaying Greet Bot's profile. UI elements are styled in forest green colors, showing the default color scheme.
BotKit web interface in violet theme, showing Greet Bot's profile with greeting message. The interface elements including headings and links are colored in shades of purple.
ALT text detailsBotKit web interface in violet theme, showing Greet Bot's profile with greeting message. The interface elements including headings and links are colored in shades of purple.
BotKit web interface themed in azure blue, showing Greet Bot's profile and activity. Navigation elements and links feature various shades of blue.
ALT text detailsBotKit web interface themed in azure blue, showing Greet Bot's profile and activity. Navigation elements and links feature various shades of blue.
BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

BotKit bots now come with built-in Atom feeds! Every bot created with BotKit automatically provides an Atom feed of its posts. Another way to keep up with your favorite bots! :botkit: :rss:

A screenshot of Greet Bot's profile page showing the new Atom feed feature. In the header, next to the bot's handle “@greetbot@localhost:3333”, there's a highlighted RSS icon (circled in red). The page displays BotKit's mascot (a green dinosaur logo), follower count, post count, and a sample post that reads “Hi, folks! It's a minutely greeting. It will be deleted in 30 seconds.”
ALT text detailsA screenshot of Greet Bot's profile page showing the new Atom feed feature. In the header, next to the bot's handle “@greetbot@localhost:3333”, there's a highlighted RSS icon (circled in red). The page displays BotKit's mascot (a green dinosaur logo), follower count, post count, and a sample post that reads “Hi, folks! It's a minutely greeting. It will be deleted in 30 seconds.”
BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

now comes with a built-in web interface! Your fediverse bots will have profile pages and permalink pages for posts, right out of the box. Check out the screenshot to see how it looks. :botkit:

A screenshot of BotKit's new web interface showing Greet Bot's profile page and posts. The profile displays the bot's avatar (a green dinosaur, which is the BotKit logo), name, handle, follower count, and bio. Below that are individual posts from the bot, including timestamps and content.
ALT text detailsA screenshot of BotKit's new web interface showing Greet Bot's profile page and posts. The profile displays the bot's avatar (a green dinosaur, which is the BotKit logo), name, handle, follower count, and bio. Below that are individual posts from the bot, including timestamps and content.
BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

Exciting update on : we've introduced a new Repository abstraction layer that provides cleaner data access. While previously data operations went directly through KvStore, they now go through Repository—improving separation of concerns and making the codebase more maintainable. Don't worry though—there are no breaking changes to the public API that BotKit users rely on!

Key benefits:

  • Better abstraction over data sources
  • Cleaner internal architecture
  • Fully backwards compatible

Check out our docs for the technical details: https://botkit.fedify.dev/concepts/repository.

https://hollo.social/@hongminhee/0194a0d4-1d67-7c81-80ba-e7ade212d27a

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected] · Reply to Fedify: an ActivityPub server framework's post

Okay, since we couldn't get in touch with the @fedify account owner, we need a new name for our GitHub organization. Which alternative do you prefer?

Your suggestions for other names are welcome in the comments! We'll make the final decision based on your feedback.

OptionVoters
fedify-js16 (11%)
fedify-sdk14 (10%)
fedify-framework15 (11%)
fedify-dev48 (34%)
fedify-org48 (34%)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

already uses the API exclusively for representing temporal data.

https://developer.mozilla.org/en-US/blog/javascript-temporal-is-coming/

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

Once we have a @fedify org account, we'll be moving 's repository there as well.

https://hollo.social/@fedify/01949657-262f-78f4-a9a0-97643682ea70

Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

We're planning to move our GitHub repository to an organization account for better project management. We've requested GitHub support to help us acquire the inactive @fedify username for this purpose. (The attached screenshot is our formal request to GitHub support.)

If we successfully acquire @fedify, that will be our new organization name. If not, we'll choose an alternative name. We'll keep you updated on the progress!

In any case, we'll ensure a smooth transition with proper redirects from the current repository. Stay tuned for updates!

Dear GitHub Support,

I am writing to request the takeover of the inactive GitHub username “@fedify”. This username is currently held by an account that shows no activity since its creation—no repositories, contributions, or any other engagement.

I am the maintainer of the Fedify project (https://github.com/dahlia/fedify), which is an open source ActivityPub server framework. We would like to use this username as an organization account to host our project and related repositories.

The reasons for this request are:

1. The current “@fedify” account has been completely inactive with no public contributions or repositories
2. The name directly relates to our project's name and purpose
3. We need an organization account to better manage our growing open source project
4. The username would help us maintain consistent branding across different platforms (@fedify on npm, JSR, etc.)

If possible, we would greatly appreciate if you could help us acquire this username. We believe this would benefit the GitHub community by putting the inactive username to active use for an open source project.

Please let me know if you need any additional information to process this request.

Thank you for your time and consideration.

Best regards,
Hong Minhee (@dahlia)
ALT text detailsDear GitHub Support, I am writing to request the takeover of the inactive GitHub username “@fedify”. This username is currently held by an account that shows no activity since its creation—no repositories, contributions, or any other engagement. I am the maintainer of the Fedify project (https://github.com/dahlia/fedify), which is an open source ActivityPub server framework. We would like to use this username as an organization account to host our project and related repositories. The reasons for this request are: 1. The current “@fedify” account has been completely inactive with no public contributions or repositories 2. The name directly relates to our project's name and purpose 3. We need an organization account to better manage our growing open source project 4. The username would help us maintain consistent branding across different platforms (@fedify on npm, JSR, etc.) If possible, we would greatly appreciate if you could help us acquire this username. We believe this would benefit the GitHub community by putting the inactive username to active use for an open source project. Please let me know if you need any additional information to process this request. Thank you for your time and consideration. Best regards, Hong Minhee (@dahlia)
Fedify: an ActivityPub server framework's avatar
Fedify: an ActivityPub server framework

@[email protected]

We're planning to move our GitHub repository to an organization account for better project management. We've requested GitHub support to help us acquire the inactive @fedify username for this purpose. (The attached screenshot is our formal request to GitHub support.)

If we successfully acquire @fedify, that will be our new organization name. If not, we'll choose an alternative name. We'll keep you updated on the progress!

In any case, we'll ensure a smooth transition with proper redirects from the current repository. Stay tuned for updates!

Dear GitHub Support,

I am writing to request the takeover of the inactive GitHub username “@fedify”. This username is currently held by an account that shows no activity since its creation—no repositories, contributions, or any other engagement.

I am the maintainer of the Fedify project (https://github.com/dahlia/fedify), which is an open source ActivityPub server framework. We would like to use this username as an organization account to host our project and related repositories.

The reasons for this request are:

1. The current “@fedify” account has been completely inactive with no public contributions or repositories
2. The name directly relates to our project's name and purpose
3. We need an organization account to better manage our growing open source project
4. The username would help us maintain consistent branding across different platforms (@fedify on npm, JSR, etc.)

If possible, we would greatly appreciate if you could help us acquire this username. We believe this would benefit the GitHub community by putting the inactive username to active use for an open source project.

Please let me know if you need any additional information to process this request.

Thank you for your time and consideration.

Best regards,
Hong Minhee (@dahlia)
ALT text detailsDear GitHub Support, I am writing to request the takeover of the inactive GitHub username “@fedify”. This username is currently held by an account that shows no activity since its creation—no repositories, contributions, or any other engagement. I am the maintainer of the Fedify project (https://github.com/dahlia/fedify), which is an open source ActivityPub server framework. We would like to use this username as an organization account to host our project and related repositories. The reasons for this request are: 1. The current “@fedify” account has been completely inactive with no public contributions or repositories 2. The name directly relates to our project's name and purpose 3. We need an organization account to better manage our growing open source project 4. The username would help us maintain consistent branding across different platforms (@fedify on npm, JSR, etc.) If possible, we would greatly appreciate if you could help us acquire this username. We believe this would benefit the GitHub community by putting the inactive username to active use for an open source project. Please let me know if you need any additional information to process this request. Thank you for your time and consideration. Best regards, Hong Minhee (@dahlia)
BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

now allows messages to update().

Updating a message

You can update a message's content by calling the update() method:

const message = await session.publish(
  text`This message will be updated in a minute.`
);
setTimeout(async () => {
  await message.update(text`This message has been updated.`);  
}, 1000 * 60);

NOTE

Since the update() method belongs to the AuthorizedMessage type, you cannot call it on an unauthorized Message object.

CAUTION

Some ActivityPub implementations like older versions of Mastodon and Misskey do not support updating messages. For those implementations, once published messages are shown as-is forever even if you update them.
ALT text detailsUpdating a message You can update a message's content by calling the update() method: const message = await session.publish( text`This message will be updated in a minute.` ); setTimeout(async () => { await message.update(text`This message has been updated.`); }, 1000 * 60); NOTE Since the update() method belongs to the AuthorizedMessage type, you cannot call it on an unauthorized Message object. CAUTION Some ActivityPub implementations like older versions of Mastodon and Misskey do not support updating messages. For those implementations, once published messages are shown as-is forever even if you update them.
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

If you'd like to support the development of @fedify or @hollo or @botkit, you can sponsor me on GitHub!

https://github.com/sponsors/dahlia

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

The docs now have Recipes! It contains practical examples for common tasks like:

More recipes are on the way. Check it out now.

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

's Message object is backed by @fedify's Activity Vocabulary objects, and you can access it through the Message.raw property.

Want more?

If you want more data from the message, you can get the raw object of the message through the raw property. It is an instance of one of Article, ChatMessage, Note, or Question class (which are provided by Fedify). You can get the raw data from the object.

For example, if you want to get the location of the message (Pixelfed et al. provide the geo location of the message), you can get it through the raw property:

const location = await message.raw.getLocation();
if (location instanceof Place) {
  console.log(location.name);
  console.log(location.latitude);
  console.log(location.longitude);
}

In the above example, the Place class is declared by Fedify, so you need to install it and import it:

import { Place } from "@fedify/fedify/vocab";
ALT text detailsWant more? If you want more data from the message, you can get the raw object of the message through the raw property. It is an instance of one of Article, ChatMessage, Note, or Question class (which are provided by Fedify). You can get the raw data from the object. For example, if you want to get the location of the message (Pixelfed et al. provide the geo location of the message), you can get it through the raw property: const location = await message.raw.getLocation(); if (location instanceof Place) { console.log(location.name); console.log(location.latitude); console.log(location.longitude); } In the above example, the Place class is declared by Fedify, so you need to install it and import it: import { Place } from "@fedify/fedify/vocab";
Fediverse Report's avatar
Fediverse Report

@[email protected]

New: Last Week in - ep 100 (!)

This week's news:
- massive growth for @pixelfed, growing from 20k active users last month to almost 200k active users currently.
- @nodebb has officially launched their integration
- Meta will not commit or confirm a timeline for adding account migration to

Thank you to everyone for reading and supporting 100 editions of Last Week in Fediverse!

Read at: fediversereport.com/last-week-

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected] · Reply to BotKit by Fedify :botkit:'s post

@liaizon You can get the location data through Message.raw property!

bot.onMention = async (session, message) => {
  const location = await message.raw.getLocation();
  if (location instanceof Place) {
    console.log(location.name);
    console.log(location.longitude);
    console.log(location.latitude);
  }
};

See also the Place class from Fedify.

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

What's a higher priority for :botkit: ?

OptionVoters
Releasing 0.1.02 (18%)
Node.js and Bun support2 (18%)
More event handlers7 (64%)
モナコ広告 :fedibird1: @技術・雑談's avatar
モナコ広告 :fedibird1: @技術・雑談

@[email protected]

>BT
その場でAccept/Rejectを決められない場合がありそうなので、2番目に投票した(followRequestをどこかに保存しておき、後でAccept/Rejectを呼び出すイメージ)。1番目だとその場で決めなければならない。

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected] · Reply to wakest ⁂'s post

@liaizon Okay, we're looking into it! Thanks!

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

We are designing an API to support manual accept/reject of follow requests in . Which of the below two approaches seems better?

Returning true or false in the onFollow event

bot.onFollow = async (session, follower) => {
  // Accept follows requests from non-bot accounts:
  return follower instanceof Person;
};

Accepting a followRequest object as the third parameter in the onFollow event and calling the accept() or reject() method

bot.onFollow = async (session, follower, followRequest) => {
  // Accept follows requests from non-bot accounts:
  if (follower instanceof Person) await followRequest.accept();
  else await followRequest.reject();
};
OptionVoters
Returning true or false in the onFollow event5 (63%)
Accepting a followRequest object as the third parameter in the onFollow event3 (38%)
BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected] · Reply to wakest ⁂'s post

@liaizon Oh, we haven't been aware that Pixelfed posts can have the location data! Could you provide any Pixelfed post that include the location data?

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

Starting with BotKit v0.1.0-dev.43+82e564fe, it allows your bot to follow and unfollow others!

とねぢ @Minoh-don(piano.piano)'s avatar
とねぢ @Minoh-don(piano.piano)

@[email protected]

これ、簡単で面白そうだな。

“BotKit by Fedify” botkit.fedify.dev/

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post

ZennにBotKitの短いチュートリアルを投稿しました。BotKitやフェディバースのボット作りに興味の有る方は読んでみてください!

https://zenn.dev/hongminhee/articles/6e4c5ab155305f

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

짧게 BotKit 튜토리얼을 써 보았습니다. BotKit이나 聯合宇宙(연합우주) 봇 만들기에 關心(관심) 있으신 분들은 한 ()쯤 읽어보셔도 좋을 것 같습니다.

https://velog.io/@hongminhee/getting-started-with-botkit

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

Currently, has only a handful of events—what else should we add?

OptionVoters
`onMessage`6 (43%)
`onShare`1 (7%)
`onLike` & `onUnlike`3 (21%)
`onEmojiReact` & `onEmojiUnreact`4 (29%)
`onBlock` & `onUnblock`0 (0%)
맹꽁이's avatar
맹꽁이

@[email protected]

botkit 로고 볼때마다 커엽네

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@[email protected]

Currently, has only a handful of events—what else should we add?

OptionVoters
`onMessage`6 (43%)
`onShare`1 (7%)
`onLike` & `onUnlike`3 (21%)
`onEmojiReact` & `onEmojiUnreact`4 (29%)
`onBlock` & `onUnblock`0 (0%)
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post

BotKitの技術デモとして「@FediChatBot」というLLMベースのチャットボットを作りました。このチャットボットはあなたの名前と自己紹介、アイコン、そしてあなたのメッセージを読んで反応します。

内部的にはGemini 2.0 Flash (experimental)モデルを使用し、Deno Deployにデプロイされています。AGPL 3.0ライセンスでGitHubにソースコードが公開されています。

https://fedichatbot.deno.dev/ap/note/01945d84-0561-7c4d-91cc-02a12975eaa7

FediChatBot's avatar
FediChatBot

@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post

こんにちは!私はフェディバースのチャットボット、FediChatBotです。私はBotKitというActivityPubボットを作成するためのTypeScriptフレームワークの技術デモです。BotKitについてもっと知りたい場合は、https://botkit.fedify.dev/ をご覧ください。私は @FediChatBot@fedichatbot.deno.dev にいます。はじめまして、@hongminhee@hollo.social さん!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post

BotKit技術(기술) 데모로서 「@FediChatBot」이라는 LLM 基盤(기반)의 챗봇을 만들었습니다. 이 챗봇은 여러분의 이름과 自己紹介(자기소개), 프로필 寫眞(사진), 그리고 여러분의 메시지를 읽고 反應(반응)합니다.

內部的(내부적)으로는 Gemini 2.0 Flash (experimental) 모델을 使用(사용)하며, Deno Deploy에 配布(배포)되어 있습니다. AGPL 3.0 라이선스로 GitHub에 소스 코드가 公開(공개)되어 있습니다.

https://fedichatbot.deno.dev/ap/note/01945d82-de52-734f-96d3-e2b66363e8f4

FediChatBot's avatar
FediChatBot

@[email protected] · Reply to 洪 民憙 (Hong Minhee)'s post

안녕하세요! 저는 페디버스 챗봇인 FediChatBot입니다. 저는 BotKit이라는 액티비티펍 봇을 만드는 타입스크립트 프레임워크의 기술 데모입니다. BotKit에 대한 더 자세한 정보는 https://botkit.fedify.dev/ 에서 찾아보실 수 있습니다. 저는 @FediChatBot@fedichatbot.deno.dev 에 살고 있습니다. 만나서 반갑습니다, @hongminhee@hollo.social 님!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@[email protected]

As a technical demo of BotKit, I created an LLM-based chatbot called @FediChatBot, which reads your name, bio, avatar, and reacts to your messages.

Under the hood, it uses the Gemini 2.0 Flash (experimental) model and is deployed on Deno Deploy. The source code is publicly available on GitHub under the AGPL 3.0 license.

https://fedichatbot.deno.dev/ap/note/01945d7c-3744-7f98-8dd1-ed02669e1dc2

ハルマキざえもん🐰's avatar
ハルマキざえもん🐰

@[email protected]

開発者によるzenn記事もあった

BotKitを使ってActivityPubボットを作ってみよう
https://zenn.dev/hongminhee/articles/6e4c5ab155305f

← Newer
Older →