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

洪 民憙 (Hong Minhee) :nonbinary:

@hongminhee@hollo.social

1,113 following1,903 followers

An intersectionalist, feminist, and socialist living in Seoul (UTC+09:00). @tokolovesme's spouse. Who's behind @fedify, @hollo, and @botkit. Write some free software in , , , & . They/them.

서울에 사는 交叉女性主義者이자 社會主義者. 金剛兔(@tokolovesme)의 配偶者. @fedify, @hollo, @botkit 메인테이너. , , , 等으로 自由 소프트웨어 만듦.

()

Pinned

@hongminhee@hollo.social

Hello! I'm Hong Minhee (洪 民憙), an open source software engineer in my late 30s, living in Seoul, Korea. I'm bisexual and non-binary (they/them), and an enthusiastic advocate of free/open source software and the fediverse.

I work full-time on @fedify, an ActivityPub server framework in TypeScript, funded by @sovtechfund. I'm also the creator of @hollo, a single-user ActivityPub microblog; @botkit, an ActivityPub bot framework; Hackers' Pub, a fediverse platform for software developers; and LogTape, a logging library for JavaScript and TypeScript.

I have a long interest in East Asian languages (CJK) and Unicode. I post mostly in English here, though occasionally in Japanese or in mixed-script Korean (國漢文混用體), a traditional writing style that interleaves Chinese characters with the native Korean alphabet. Wanting to write in that style was actually one of the reasons I joined the fediverse. Feel free to talk to me in English, Korean, Japanese, or even Literary Chinese!

en.wikipedia.org

Korean mixed script - Wikipedia

Pinned

はじめまして!ソウル在住の30代後半のオープンソースソフトウェアエンジニア、洪 民憙ホン・ミンヒと申します。バイセクシュアル(bisexual)・ノンバイナリー(non-binary)で、自由・オープンソースソフトウェア(F/OSS)とフェディバース(fediverse)の熱烈な支持者です。

STF(@sovtechfund)の支援を受け、TypeScript用ActivityPubサーバーフレームワーク「@fedify」の開発に専念しています。他にも、おひとり様向けのActivityPubマイクロブログ「@hollo」、ActivityPubボットフレームワーク「@botkit」、ソフトウェア開発者向けフェディバースプラットフォームHackers' Pub、JavaScript・TypeScript用ロギングライブラリLogTapeなどの制作者でもあります。

東アジア言語(いわゆるCJK)とUnicodeにも興味があります。このアカウントでは主に英語で投稿していますが、時々日本語や国漢文混用体(漢字ハングル混じり文)の韓国語でも書いています。実はこの文体で書きたくてフェディバースを始めた、という経緯もあります。日本語、英語、韓国語、漢文でも気軽に話しかけてください!

speakerdeck.com

国漢文混用体からHolloまで

本発表では、韓国語の「国漢文混用体」(漢字ハングル混じり文)を自分のフェディバース投稿に実装したいという小さな目標から始まった旅路を共有します。 この目標を達成するために、ActivityPubのJSON-LDの複雑さやHTTP Signatures、WebFingerなどの仕様を理解する必要性に…

Pinned

安寧(안녕)하세요! 저는 서울에 살고 있는 30() 後半(후반)의 오픈 소스 소프트웨어 엔지니어 洪民憙(홍민희)입니다. 兩性愛者(양성애자)(bisexual)이자 논바이너리(non-binary)이며, 自由(자유)·오픈 소스 소프트웨어(F/OSS)와 聯合宇宙(연합우주)(fediverse)의 熱烈(열렬)支持者(지지자)이기도 합니다.

STF(@sovtechfund)의 支援(지원)을 받아 TypeScript() ActivityPub 서버 프레임워크 @fedify 開發(개발)專業(전업)으로 ()하고 있습니다. 그 ()에도 싱글 유저() ActivityPub 마이크로블로그 @hollo, ActivityPub 봇 프레임워크 @botkit, 소프트웨어 開發者(개발자)를 위한 聯合宇宙(연합우주) 플랫폼 Hackers' Pub, JavaScript·TypeScript() 로깅 라이브러리 LogTape ()製作者(제작자)이기도 합니다.

()아시아 言語(언어)(이른바 CJK)와 Unicode에도 關心(관심)이 많습니다. 이 計定(계정)에서는 ()英語(영어)로 포스팅하지만, 때때로 日本語(일본어)國漢文混用體(국한문 혼용체) 韓國語(한국어)로도 씁니다. 聯合宇宙(연합우주)에 오게 된 動機(동기) () 하나가 바로 國漢文混用體(국한문 혼용체)로 글을 쓰고 싶었기 때문이기도 하고요. 韓國語(한국어), 英語(영어), 日本語(일본어), 아니면 漢文(한문)으로도 말을 걸어주세요!

logtape.org

LogTape

Unobtrusive logging library with zero dependencies—library-first design for Deno, Node.js, Bun, browsers, and edge functions

@ogwabfp@toot.blue

Apple Music に韓国の皆さんがアップしている弾劾プレイリストがあるのね。すごいなぁ!

탄핵 で検索

@fedilug@msky.ospn.jp

【技術書同人誌博覧会に出展します!】
は2025年1月25日に横浜産貿ホール マリネリアで開催される第11回技術書同人誌博覧会( )に出展します。
新刊として『Thinkng Penguin Magazine vol.0』を頒布します!(124ページ・500円)
委託として
@naoki_wjm@k.my-sky.blue さんの『さばかんライフ!』も頒布いたします!

詳しくは技術書博の公式サイトおよび、サークル概要をご覧ください!
https://gishohaku.dev/gishohaku11/circles/LOmokXEikphsDCEG9OEb

@monaco_koukoku@fedibird.com

ぴったり対応する表現は思いつきませんね…。
恋愛している学生さんを「青春してるね」と形容することはあるでしょうが、恋愛専用の言い方ではありません(部活動に打ち込む場合などでも言う)し、大人に対してはあまり使いません。
QT: hollo.social/@hongminhee/01944
[参照]

fedibird.com

投稿の参照(1件) by モナコ広告 :fedibird1: @技術・雑談 (@monaco_koukoku@fedibird.com)

韓国では恋愛を「青春事業」と表現する事も有りますが、日本でも同じ様な表現を使いますか?

@esurio1673@c.koliosky.com

Holloは0.4.0からNode.js版になってメモリリークが大幅に改善した

@hongminhee@hollo.social

저 어릴 때는 國民學校(국민학교)에서 低學年(저학년)數字(숫자)는 네 자리마다 쉼표로 끊으라고 알려줬는데, 몇 () 지나니까 어느새 세 자리마다 끊으라고 알려주더라고요.

https://planet.moe/@robin_maki/113764308461435382

planet.moe

robin (@robin_maki@planet.moe)

한자문화권 국가용 4자리 숫자 표기를 표준화하라 100 0000이든 100,0000이든 뭐든 추가해라

@robin_maki@planet.moe

한자문화권 국가용 4자리 숫자 표기를 표준화하라
100 0000이든 100,0000이든 뭐든 추가해라

使い方や今後のロードマップ等、BotKitに関する質問を受け付けます。お気軽に質問してください!

https://hollo.social/@fedify/01944eb9-35a1-779b-a3e8-0b10c074adf8

hollo.social

:botkit: スタンドアロンのActivityPubボッ…

:botkit: スタンドアロンのActivityPubボットを作成するためのTypeScriptフレームワーク、[BotKit]を発表します! 一般的なMastodonボットとは異なり、BotKitで作成したボットは、プラットフォームの制約なく完全に独立して動作するFediverseボットです。シンプルで直感的なAPIにより、TypeScriptファイル1つでボットを作成できます。 現在はDenoのみの対応で、今後Node.jsとBunのサポートも予定しています。堅牢な[Fedify]をベースに開発されています。 <https://botkit.fedify.dev/> [BotKit]: https://botkit.fedify.dev/ [Fedify]: https://fedify.dev/

:botkit: スタンドアロンのActivityPubボットを作成するためのTypeScriptフレームワーク、BotKitを発表します!

一般的なMastodonボットとは異なり、BotKitで作成したボットは、プラットフォームの制約なく完全に独立して動作するFediverseボットです。シンプルで直感的なAPIにより、TypeScriptファイル1つでボットを作成できます。

現在はDenoのみの対応で、今後Node.jsとBunのサポートも予定しています。堅牢なFedifyをベースに開発されています。

https://botkit.fedify.dev/

botkit.fedify.dev

BotKit by Fedify

A framework for creating your ActivityPub bots

使用法(사용법)이나 앞으로의 로드맵 () BotKit에 ()質問(질문)을 받습니다. 自由(자유)롭게 물어보세요!

https://hollo.social/@fedify/01944eb7-f9cb-79bc-8426-227cf337d094

hollo.social

:botkit: 독립형 ActivityPub 봇을 만들…

:botkit: 독립형 ActivityPub 봇을 만들기 위한 TypeScript 프레임워크인 [BotKit]을 소개합니다! 일반적인 Mastodon 봇과 달리, BotKit으로 만든 봇은 플랫폼의 제약 없이 완전히 독립적으로 동작하는 연합우주(fediverse) 봇입니다. 간단하고 직관적인 API로 TypeScript 파일 하나만으로도 봇을 만들 수 있어요. 현재는 Deno만 지원하지만, Node.js와 Bun 지원도 계획하고 있습니다. 견고한 [Fedify] 기반으로 제작되었습니다. <https://botkit.fedify.dev/> [BotKit]: https://botkit.fedify.dev/ [Fedify]: https://fedify.dev/

:botkit: 독립형 ActivityPub 봇을 만들기 위한 TypeScript 프레임워크인 BotKit을 소개합니다!

일반적인 Mastodon 봇과 달리, BotKit으로 만든 봇은 플랫폼의 제약 없이 완전히 독립적으로 동작하는 연합우주(fediverse) 봇입니다. 간단하고 직관적인 API로 TypeScript 파일 하나만으로도 봇을 만들 수 있어요.

현재는 Deno만 지원하지만, Node.js와 Bun 지원도 계획하고 있습니다. 견고한 Fedify 기반으로 제작되었습니다.

https://botkit.fedify.dev/

botkit.fedify.dev

BotKit by Fedify

A framework for creating your ActivityPub bots

@hongminhee@hollo.social

I love to hear questions about , like how to use it or the roadmap for the future, so feel free to ask!

https://hollo.social/@fedify/01944e2e-cdc8-75d4-9be4-2e2f6b82ea6d

hollo.social

:botkit: Introducing #BotKit: …

:botkit: Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots! Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API. Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation. <https://bokit.fedify.dev/>

: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 foundation.

https://botkit.fedify.dev/

import {
  createBot,
  InProcessMessageQueue,
  MemoryKvStore,
  mention,
  text,
} from "@fedify/botkit";

// Create a bot instance:
const bot = createBot<void>({
  // The bot will have fediverse handle "@greetbot@mydomain":
  username: "greetbot",
  // Set the display name:
  name: "Greet Bot",
  // Set the profile icon (avatar):
  icon: new URL("https://mydomain/icon.png"),
  // Set the bio:
  summary: text`Hi, there! I'm a simple fediverse bot created by ${
    mention("@hongminhee@hollo.social")}.`,
  // Store data in memory (for development):
  kv: new MemoryKvStore(),
  // Use in-process message queue (for development):
  queue: new InProcessMessageQueue(),
});

// A bot can respond to a mention:
bot.onMention = async (session, message) => {
  await message.reply(text`Hi, ${message.actor}!`);
};

// Or, a bot also can actively publish a post:
const session = bot.getSession("https://mydomain/");
setInterval(async () => {
  await session.publish(text`Hi, forks! It's an hourly greeting.`);
}, 1000 * 60 * 60);

export default bot;
ALT text

import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;

@hongminhee@hollo.social

今回福岡に行った中で一番良かった経験の一つは、Engineer Cafe。韓国にも튜링의 沙果(チューリングの林檎)という同じ様なコンセプトの空間が有るが、Engineer Cafeの方が建物が素敵で雰囲気が良かった。午後3時には集まってコーヒーチャットをする時間も決まっているので、ネットワーキングにも最適。次回もEngineer Cafeに行く為に、また福岡に行きたくなるくらいだ。

https://hollo.social/@hongminhee/01943ec8-8325-719a-9189-c397103ef66b

hollo.social

天神に有る福岡赤煉瓦文化館の[Engineer Cafe]に…

天神に有る福岡赤煉瓦文化館の[Engineer Cafe]に来た。素敵なスペース! [Engineer Cafe]: https://engineercafe.jp/

@weekinfediverse@mitra.social
@deno_land@fosstodon.org

Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).

Goodbye WinterCG, welcome WinterTC!

deno.com/blog/wintertc

deno.com

Goodbye WinterCG, welcome WinterTC

WinterCG, the Web Interoperable Runtimes Community Group is moving to Ecma as TC55 to be able to publish standards.

@monaco_koukoku@fedibird.com

BotKitの初出って(たぶん)これじゃん。1ヶ月どころか2週間も経っていない…​ :meowsurprised:
QT: hollo.social/@hongminhee/01941
[参照]

fedibird.com

投稿の参照(1件) by モナコ広告 :fedibird1: @技術・雑談 (@monaco_koukoku@fedibird.com)

I'm currently brainstorming a framework for creating fediverse bots called #BotKit, based on #Fedify. It's less flexible than Fedify, but the goal is to make it possible to create simple fediverse bots with much less code. What do you think? #fedidev #ActivityPub · 添付: 1 枚の画像

@hongminhee@hollo.social

I'm currently brainstorming a framework for creating fediverse bots called , based on . It's less flexible than Fedify, but the goal is to make it possible to create simple fediverse bots with much less code. What do you think?

import { createBot, mention, text } from "@fedify/botkit";
import { RedisKvStore } from "@fedify/redis";
import { Redis } from "ioredis";

// Create a bot instance:
const bot = createBot({
  // The bot will have fediverse handle "@greetbot@mydomain":
  username: "greetbot",
  // Set the profile icon (avatar):
  icon: new URL("https://mydomain/icon.png"),
  // Set the bio:
  bio: text`Hi, there! I'm a simple fediverse bot created by ${
    mention("@hongminhee@hollo.social").}`,
  // Use Redis as a key-value store:
  kv: new RedisKvStore(new Redis()),
  // Use Redis as a message queue:
  queue: new RedisMessageQueue(() => new Redis()),
});

// A bot can respond to a mention:
bot.on(/hi|hello|what'?s\s+up/i, (ctx) => {
  return ctx.reply(text`Hi, ${ctx.actor}!`);
});

// Or, a bot also can actively publish a post:
setInterval(async () => {
  await bot.publish(text`Hi, forks! It's an hourly greeting.`);
}, 1000 * 60 * 60);

export default bot;
ALT text

import { createBot, mention, text } from "@fedify/botkit"; import { RedisKvStore } from "@fedify/redis"; import { Redis } from "ioredis"; // Create a bot instance: const bot = createBot({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: bio: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social").}`, // Use Redis as a key-value store: kv: new RedisKvStore(new Redis()), // Use Redis as a message queue: queue: new RedisMessageQueue(() => new Redis()), }); // A bot can respond to a mention: bot.on(/hi|hello|what'?s\s+up/i, (ctx) => { return ctx.reply(text`Hi, ${ctx.actor}!`); }); // Or, a bot also can actively publish a post: setInterval(async () => { await bot.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;

:_ko::_ko::_a::_ni::_lya::_n:
@cocoa_vrc@misskey.io

Fedify自体がActivityPubのフレームワークなので​:eyes_fidgeting:

:_ko::_ko::_a::_ni::_lya::_n:
@cocoa_vrc@misskey.io

MisskeyとかのAPIを経由せずにBot自体がサーバーになる感じかな​:thinknyan:

使い方や今後のロードマップ等、BotKitに関する質問を受け付けます。お気軽に質問してください!

https://hollo.social/@fedify/01944eb9-35a1-779b-a3e8-0b10c074adf8

hollo.social

:botkit: スタンドアロンのActivityPubボッ…

:botkit: スタンドアロンのActivityPubボットを作成するためのTypeScriptフレームワーク、[BotKit]を発表します! 一般的なMastodonボットとは異なり、BotKitで作成したボットは、プラットフォームの制約なく完全に独立して動作するFediverseボットです。シンプルで直感的なAPIにより、TypeScriptファイル1つでボットを作成できます。 現在はDenoのみの対応で、今後Node.jsとBunのサポートも予定しています。堅牢な[Fedify]をベースに開発されています。 <https://botkit.fedify.dev/> [BotKit]: https://botkit.fedify.dev/ [Fedify]: https://fedify.dev/

:botkit: スタンドアロンのActivityPubボットを作成するためのTypeScriptフレームワーク、BotKitを発表します!

一般的なMastodonボットとは異なり、BotKitで作成したボットは、プラットフォームの制約なく完全に独立して動作するFediverseボットです。シンプルで直感的なAPIにより、TypeScriptファイル1つでボットを作成できます。

現在はDenoのみの対応で、今後Node.jsとBunのサポートも予定しています。堅牢なFedifyをベースに開発されています。

https://botkit.fedify.dev/

botkit.fedify.dev

BotKit by Fedify

A framework for creating your ActivityPub bots

使用法(사용법)이나 앞으로의 로드맵 () BotKit에 ()質問(질문)을 받습니다. 自由(자유)롭게 물어보세요!

https://hollo.social/@fedify/01944eb7-f9cb-79bc-8426-227cf337d094

hollo.social

:botkit: 독립형 ActivityPub 봇을 만들…

:botkit: 독립형 ActivityPub 봇을 만들기 위한 TypeScript 프레임워크인 [BotKit]을 소개합니다! 일반적인 Mastodon 봇과 달리, BotKit으로 만든 봇은 플랫폼의 제약 없이 완전히 독립적으로 동작하는 연합우주(fediverse) 봇입니다. 간단하고 직관적인 API로 TypeScript 파일 하나만으로도 봇을 만들 수 있어요. 현재는 Deno만 지원하지만, Node.js와 Bun 지원도 계획하고 있습니다. 견고한 [Fedify] 기반으로 제작되었습니다. <https://botkit.fedify.dev/> [BotKit]: https://botkit.fedify.dev/ [Fedify]: https://fedify.dev/

:botkit: 독립형 ActivityPub 봇을 만들기 위한 TypeScript 프레임워크인 BotKit을 소개합니다!

일반적인 Mastodon 봇과 달리, BotKit으로 만든 봇은 플랫폼의 제약 없이 완전히 독립적으로 동작하는 연합우주(fediverse) 봇입니다. 간단하고 직관적인 API로 TypeScript 파일 하나만으로도 봇을 만들 수 있어요.

현재는 Deno만 지원하지만, Node.js와 Bun 지원도 계획하고 있습니다. 견고한 Fedify 기반으로 제작되었습니다.

https://botkit.fedify.dev/

botkit.fedify.dev

BotKit by Fedify

A framework for creating your ActivityPub bots

@hongminhee@hollo.social

I love to hear questions about , like how to use it or the roadmap for the future, so feel free to ask!

https://hollo.social/@fedify/01944e2e-cdc8-75d4-9be4-2e2f6b82ea6d

hollo.social

:botkit: Introducing #BotKit: …

:botkit: Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots! Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API. Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation. <https://bokit.fedify.dev/>

: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 foundation.

https://botkit.fedify.dev/

import {
  createBot,
  InProcessMessageQueue,
  MemoryKvStore,
  mention,
  text,
} from "@fedify/botkit";

// Create a bot instance:
const bot = createBot<void>({
  // The bot will have fediverse handle "@greetbot@mydomain":
  username: "greetbot",
  // Set the display name:
  name: "Greet Bot",
  // Set the profile icon (avatar):
  icon: new URL("https://mydomain/icon.png"),
  // Set the bio:
  summary: text`Hi, there! I'm a simple fediverse bot created by ${
    mention("@hongminhee@hollo.social")}.`,
  // Store data in memory (for development):
  kv: new MemoryKvStore(),
  // Use in-process message queue (for development):
  queue: new InProcessMessageQueue(),
});

// A bot can respond to a mention:
bot.onMention = async (session, message) => {
  await message.reply(text`Hi, ${message.actor}!`);
};

// Or, a bot also can actively publish a post:
const session = bot.getSession("https://mydomain/");
setInterval(async () => {
  await session.publish(text`Hi, forks! It's an hourly greeting.`);
}, 1000 * 60 * 60);

export default bot;
ALT text

import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;

@hongminhee@hollo.social

@annyeong 네, 그렇기도 하고, 예를 들어 skip: boolean 같은 인자를 받는다고 하면 true가 스킵인지 false가 스킵인지에 대한 정보가 타입 자체에는 없어서 매개변수 이름에 그 정보가 따로 부호화되어야 하는 게 문제인 것 같아요.

:botkit: スタンドアロンのActivityPubボットを作成するためのTypeScriptフレームワーク、BotKitを発表します!

一般的なMastodonボットとは異なり、BotKitで作成したボットは、プラットフォームの制約なく完全に独立して動作するFediverseボットです。シンプルで直感的なAPIにより、TypeScriptファイル1つでボットを作成できます。

現在はDenoのみの対応で、今後Node.jsとBunのサポートも予定しています。堅牢なFedifyをベースに開発されています。

https://botkit.fedify.dev/

botkit.fedify.dev

BotKit by Fedify

A framework for creating your ActivityPub bots