lingo.lol is one of the many independent Mastodon servers you can use to participate in the fediverse.
A place for linguists, philologists, and other lovers of languages.

Server stats:

63
active users

#fedidev

1 post1 participant0 posts today
洪 民憙 (Hong Minhee)<p>I've been thinking about client-server interactions in the <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a>. <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/C2S" target="_blank">#<span>C2S</span></a> isn't widely used, and most clients rely on Mastodon-compatible APIs instead.</p><p>What if we created a new standardized API based on <a href="https://graphql.org/" rel="nofollow noopener noreferrer" target="_blank">GraphQL</a> + <a href="https://relay.dev/" rel="nofollow noopener noreferrer" target="_blank">Relay</a> for client-server communication, while keeping ActivityPub for server-to-server federation?</p><p>The Mastodon-compatible API lacks formal schema definitions for code generation and type checking, which hurts developer productivity. And ActivityPub C2S is honestly too cumbersome to use directly from client apps.</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/GraphQL" target="_blank">#<span>GraphQL</span></a> would give us type safety, efficient data fetching (only get what you need), and the ability to evolve the API without breaking clients. <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Relay" target="_blank">#<span>Relay</span></a>'s features for pagination, caching, and optimistic updates seem perfect for social apps.</p><p>Would this be valuable to our community? What challenges do you see? How might we handle backward compatibility? And should this be formalized as an FEP?</p><p>Curious what others think about this approach.</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
洪 民憙 (Hong Minhee)<p>Okay, I've just deployed a bleeding edge <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Fedify" target="_blank">#<span>Fedify</span></a>, which implements both RFC 9421 and double-knocking, to <a href="https://hackers.pub/" rel="nofollow noopener noreferrer" target="_blank">Hackers' Pub</a>. If you'd like to test your implementations against a real server, please give it a try! (If you want to create an account, let me know—I can invite you.)</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a></p>
洪 民憙 (Hong Minhee)<p>Looking for <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> implementations with <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/RFC9421" target="_blank">#<span>RFC9421</span></a> support! 🔍</p><p>As mentioned in the <a href="https://hollo.social/@fedify/0196b3e9-275d-7141-b228-9e978521d3d9" rel="nofollow noopener noreferrer" target="_blank">Fedify announcement</a> below, I've implemented <a href="https://www.rfc-editor.org/rfc/rfc9421" rel="nofollow noopener noreferrer" target="_blank">RFC 9421</a> (HTTP Message Signatures) and need to verify its interoperability with other ActivityPub implementations.</p><p>The challenge is that most major ActivityPub projects don't seem to have full RFC 9421 implementations in production yet. If you're working on an ActivityPub project that:</p><ul> <li>has implemented RFC 9421 (even in a development branch)</li><li>is currently implementing it</li><li>has plans to implement it soon</li> </ul><p>Please reach out! I'd love to collaborate on interoperability testing to ensure our implementations work properly with each other before merging this into <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Fedify" target="_blank">#<span>Fedify</span></a>'s main branch.</p><p>Any leads or connections would be greatly appreciated! 🙏</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
Fedify: an ActivityPub server framework<p>We're excited to announce that we've implemented <a href="https://www.rfc-editor.org/rfc/rfc9421" rel="nofollow noopener noreferrer" target="_blank">RFC 9421</a> (HTTP Message Signatures) in <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Fedify" target="_blank">#<span>Fedify</span></a>, complete with our <a href="https://swicg.github.io/activitypub-http-signature/#how-to-upgrade-supported-versions" rel="nofollow noopener noreferrer" target="_blank">double-knocking</a> mechanism to maintain backward compatibility with the <a href="https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures-12" rel="nofollow noopener noreferrer" target="_blank">draft cavage</a> version.</p><p>This implementation includes both signature generation and verification, meaning <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/RFC9421" target="_blank">#<span>RFC9421</span></a> is used when both sending and receiving activities. While we haven't merged the <a href="https://github.com/fedify-dev/fedify/tree/rfc9421" rel="nofollow noopener noreferrer" target="_blank">RFC 9421 implementation branch</a> yet, we're currently conducting interoperability tests with development versions of Mastodon and other <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> implementations. Once these tests confirm compatibility, we'll proceed with the merge.</p><p>As noted in the attached docs, although RFC 9421 is the final and official standard for HTTP Signatures, the draft cavage version remains widely used across the <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a>. Our double-knocking mechanism ensures maximum compatibility by trying the RFC 9421 version first, then falling back to draft cavage if needed.</p><p>Currently, we support RSA-PKCS<a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/1" target="_blank">#<span>1</span></a>-v1.5 key pairs for generating HTTP Message Signatures, with plans to expand to other signature types in future releases.</p><p>We look forward to contributing to a more standardized and secure fediverse!</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
Bolet :neobread_eyes:<p>Great news for the wafrn app !!</p> <p>As a culmination of the big journey of the past weeks, the Wafrn App is now listed in the official <span class="h-card" translate="no"><a href="https://fosstodon.org/@unifiedpush" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>unifiedpush</span></a></span> documentation as one of the apps that support UnifiedPush</p> <p>Check it at <a href="https://unifiedpush.org/users/apps/" rel="nofollow noopener noreferrer" target="_blank">https://unifiedpush.org/users/apps/</a></p><br> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/WafrnDev" rel="nofollow noopener noreferrer" target="_blank">#WafrnDev</a> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/FediDev" rel="nofollow noopener noreferrer" target="_blank">#FediDev</a> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/UnifiedPush" rel="nofollow noopener noreferrer" target="_blank">#UnifiedPush</a> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/Degoogle" rel="nofollow noopener noreferrer" target="_blank">#Degoogle</a> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/FreeServices" rel="nofollow noopener noreferrer" target="_blank">#FreeServices</a>
洪 民憙 (Hong Minhee)<p>After reviewing <a href="https://w3id.org/fep/5624" rel="nofollow noopener noreferrer" target="_blank">FEP-5624: <em>Per-object reply control policies</em></a> and GoToSocial's <a href="https://docs.gotosocial.org/en/latest/federation/interaction_policy/" rel="nofollow noopener noreferrer" target="_blank">interaction policy</a> spec, I find myself leaning toward the latter for long-term considerations, though both have merit.</p> <p>FEP-5624 is admirably focused and simpler to implement, which I appreciate. However, <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/GoToSocial" target="_blank"><span class="">#</span><span class="">GoToSocial</span></a>'s approach seems to offer some architectural advantages:</p> <ol> <li>The three-tier permission model (allow/require approval/deny) feels more flexible than binary allow/deny</li> <li>Separating approval objects from interactions appears more secure against forgery</li> <li>The explicit handling of edge cases (mentioned users, post authors) provides clearer semantics</li> <li>The extensible framework allows for handling diverse interaction types, not just replies</li> </ol> <p>I wonder if creating an <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/FEP" target="_blank"><span class="">#</span><span class="">FEP</span></a> that extracts GoToSocial's interaction policy design into a standalone standard might be worthwhile. It could potentially serve as a more comprehensive foundation for access control in <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/ActivityPub" target="_blank"><span class="">#</span><span class="">ActivityPub</span></a>.</p> <p>This is merely my initial impression though. I'd be curious to hear other developers' perspectives on these approaches.</p> <p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/FEP5624" target="_blank"><span class="">#</span><span class="">FEP5624</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/fedidev" target="_blank"><span class="">#</span><span class="">fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/fediverse" target="_blank"><span class="">#</span><span class="">fediverse</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/replycontrol" target="_blank"><span class="">#</span><span class="">replycontrol</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hackers.pub/tags/interactionpolicy" target="_blank"><span class="">#</span><span class="">interactionpolicy</span></a></p>
Bolet :neobread_eyes:<p>So… I did a thing: <a href="https://github.com/juandjara/expo-unified-push" rel="nofollow noopener noreferrer" target="_blank">https://github.com/juandjara/expo-unified-push</a><br> This library will help everybody developing React Native apps to use the Unified Push Android library, so they can have native notifications without depending on Google and Firebase systems.</p> <p>Next step, integrating it into wafrn</p><br> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/wafrnDev" rel="nofollow noopener noreferrer" target="_blank">#wafrnDev</a> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/fediDev" rel="nofollow noopener noreferrer" target="_blank">#fediDev</a> <a class="hashtag" href="https://app.wafrn.net/dashboard/search/react%20native" rel="nofollow noopener noreferrer" target="_blank">#react-native</a>
洪 民憙 (Hong Minhee)<p>For those skeptical of DMs in <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a>: I'm also considering an alternative verification approach using ActivityPub's <code>Question</code> feature. Instead of sending numeric codes, the system could send a poll with several emoji options, and the user would select the one that matches what's displayed on their login screen. This visual authentication method might offer better security against certain automated attacks while still leveraging federation rather than platform-specific APIs. Would this approach address some of the privacy concerns around DM-based verification?</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/OTP" target="_blank">#<span>OTP</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/auth" target="_blank">#<span>auth</span></a></p>
洪 民憙 (Hong Minhee)<p>I'm exploring a new idea called FediOTP (codename): an authentication system that uses <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> DMs to deliver one-time passwords, allowing any <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a> account to authenticate with web services. Unlike current solutions that rely on specific APIs (<a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Mastodon" target="_blank">#<span>Mastodon</span></a>, <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Misskey" target="_blank">#<span>Misskey</span></a>), this would work with any ActivityPub-compatible server, increasing interoperability across the fediverse. Would love to hear your thoughts on potential challenges or use cases for this approach.</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/OTP" target="_blank">#<span>OTP</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/auth" target="_blank">#<span>auth</span></a></p>
洪 民憙 (Hong Minhee)<p>My stance on <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a>'s adoption of JSON-LD: Since we've already decided to use JSON-LD, I hope we do it properly. However, if we hadn't used JSON-LD from the beginning, things would have been much less complicated.</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/JSONLD" target="_blank">#<span>JSONLD</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
Fedify: an ActivityPub server framework<p>Hey folks! We're excited to share a preview of a new API coming in <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Fedify" target="_blank">#<span>Fedify</span></a> 1.6 that should make structuring larger federated apps much cleaner: <a href="https://unstable.fedify.dev/manual/federation#builder-pattern-for-structuring" rel="nofollow noopener noreferrer" target="_blank"><code>FederationBuilder</code></a>.</p><p>As your Fedify applications grow, you might encounter circular dependency issues when registering dispatchers and listeners across multiple files. The new <a href="https://unstable.fedify.dev/manual/federation#builder-pattern-for-structuring" rel="nofollow noopener noreferrer" target="_blank"><code>FederationBuilder</code></a> pattern helps solve this by separating the configuration phase from instantiation.</p><p>Instead of this:</p><pre><code>// federation.ts import { createFederation } from "@fedify/fedify"; export const federation = createFederation&lt;AppContext&gt;({ kv: new DbKvStore(), queue: new RedisMessageQueue(), // Other options... }); // Now we need to import this federation instance in other files // to register dispatchers and listeners... </code></pre><p>You can now do this:</p><pre><code>// builder.ts import { createFederationBuilder } from "@fedify/fedify"; export const builder = createFederationBuilder&lt;AppContext&gt;(); // other files can import and configure this builder... </code></pre><pre><code>// actors.ts import { builder } from "./builder.ts"; import { Person } from "@fedify/fedify"; builder.setActorDispatcher("/users/{handle}", async (ctx, handle) =&gt; { // Actor implementation }); </code></pre><pre><code>// inbox.ts import { builder } from "./builder.ts"; import { Follow } from "@fedify/fedify"; builder.setInboxListeners("/users/{handle}/inbox", "/inbox") .on(Follow, async (ctx, follow) =&gt; { // Follow handling }); </code></pre><pre><code>// main.ts — Only create the Federation instance at startup import { builder } from "./builder.ts"; // Build the Federation object with actual dependencies export const federation = await builder.build({ kv: new DbKvStore(), queue: new RedisMessageQueue(), // Other options... }); </code></pre><p>This pattern helps avoid circular dependencies and makes your code more modular. Each part of your app can configure the builder without needing the actual <code>Federation</code> instance.</p><p>The full documentation will be available when 1.6 is released, but we wanted to share this early with our community. Looking forward to your feedback when it lands!</p><p>Want to try it right now? You can install the development version from <a href="https://jsr.io/@fedify/fedify@1.6.0-dev.777+1206cb01" rel="nofollow noopener noreferrer" target="_blank">JSR</a> or <a href="https://www.npmjs.com/package/@fedify/fedify/v/1.6.0-dev.777" rel="nofollow noopener noreferrer" target="_blank">npm</a>:</p><pre><code># Deno deno add jsr:@fedify/fedify@1.6.0-dev.777+1206cb01 # Node.js npm add @fedify/fedify@1.6.0-dev.777 # Bun bun add @fedify/fedify@1.6.0-dev.777 </code></pre><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
洪 民憙 (Hong Minhee)<p>I've been reflecting lately on projects like <a translate="no" class="h-card u-url mention" href="https://hollo.social/@fedify" rel="nofollow noopener noreferrer" target="_blank">@<span>fedify</span></a>, <a translate="no" class="h-card u-url mention" href="https://hollo.social/@hollo" rel="nofollow noopener noreferrer" target="_blank">@<span>hollo</span></a>, and <a translate="no" class="h-card u-url mention" href="https://hollo.social/@botkit" rel="nofollow noopener noreferrer" target="_blank">@<span>botkit</span></a>. Sometimes I wonder if I'm solving problems that very few people actually need solved. How many developers truly want to build their own <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> server from scratch?</p><p>It feels a bit like inventing shoes that let people walk on their hands all day. Would there be a viable market? How many would actually buy them?</p><p>That's the sense I get with these projects. They do have users who find them tremendously valuable, but the total user base is inherently limited. The tools serve an important function for a small audience of specialized developers.</p><p>There are moments when my motivation wavers. When the user community consists of just a handful of enthusiastic supporters, it's sometimes difficult to maintain momentum and justify the ongoing investment of time and energy.</p><p>And yet, there's something meaningful about creating specialized tools that solve complex problems well, even if they're only used by a few. Perhaps that's enough.</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
@reiver ⊼ (Charles) :batman:<p>A HEALTH-CHECK URL would, for example, make sure:</p><p>• the web-server is up,<br>• the database connection is fine,<br>• maybe query one or more important tables to make sure that still works, <br>• make sure any 3rd party APIs are working,<br>• etc.</p><p>If any of those things has a problem, then it would return "500 Internal Server Error".</p><p>Else (if everything was fine then) it would return "200 OK".</p><p><a href="https://mastodon.social/tags/DeSo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DeSo</span></a> <a href="https://mastodon.social/tags/FediAdmin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FediAdmin</span></a> <a href="https://mastodon.social/tags/Fediverse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Fediverse</span></a> <a href="https://mastodon.social/tags/FediDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FediDev</span></a> <a href="https://mastodon.social/tags/FediDevs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FediDevs</span></a></p>
@reiver ⊼ (Charles) :batman:<p>A lot of Fediverse software has a HEALTH-CHECK URL.</p><p>But not all Fediverse does.</p><p>It would be better if ALL Fediverse software had a HEALTH-CHECK URL.</p><p>...</p><p>A HEALTH-CHECK URL is a special URL that tell others if the system is running properly.</p><p>It would return "200 OK" if everything is fine. And return "500 Internal Server Error" if there is a problem</p><p>...</p><p>A HEALTH-CHECK URL is important to those who actual run and administrate Fediverse servers</p><p><a href="https://mastodon.social/tags/DeSo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DeSo</span></a> <a href="https://mastodon.social/tags/FediAdmin" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FediAdmin</span></a> <a href="https://mastodon.social/tags/Fediverse" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Fediverse</span></a> <a href="https://mastodon.social/tags/FediDev" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FediDev</span></a> <a href="https://mastodon.social/tags/FediDevs" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FediDevs</span></a></p>
BotKit by Fedify :botkit:<p><strong>BotKit 0.2.0のリリース</strong></p><p><a href="https://botkit.fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">BotKit</a> 0.2.0をリリースしました!BotKitを初めて知る方のために簡単に説明すると、BotKitはTypeScriptで開発されたスタンドアロンのActivityPubボットフレームワークです。Mastodon、Misskeyなどさまざまなフェディバース(<a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a>)のプラットフォームと連携でき、既存プラットフォームの制約なしに自由にボットを作成できます。</p><p>このリリースは、フェディバースにおけるボット開発をより簡単で強力にするための旅の重要な一歩であり、コミュニティから要望のあった機能を多数導入しています。</p><p><strong>より良いボットインタラクションへの旅</strong></p><p>BotKitの開発において、私たちは常にボットをより表現力豊かでインタラクティブにすることに焦点を当ててきました。バージョン0.2.0では、フェディバースの社会的側面をボットに取り入れることで、さらに一歩前進しました。</p><p><strong>カスタム絵文字でボットの個性を表現</strong></p><p>最も要望の多かった機能の一つがカスタム絵文字のサポートです。これにより、ボットは独自の視覚要素でメッセージを目立たせ、自分だけの個性を表現できるようになりました。</p><pre><code>// ボット用のカスタム絵文字を定義 const emojis = bot.addCustomEmojis({ botkit: { file: `${import.meta.dirname}/images/botkit.png`, type: "image/png" }, fedify: { url: "https://fedify.dev/logo.png", type: "image/png" } }); // メッセージにカスタム絵文字を使用 await session.publish( text`BotKit ${customEmoji(emojis.botkit)}は、Fedify ${customEmoji(emojis.fedify)}によって支えられています` ); </code></pre><p>この新しいAPIでは、次のことが可能になりました。</p><ul> <li><code>Bot.addCustomEmojis()</code>でボットにカスタム絵文字を追加</li><li><a href="https://botkit.fedify.dev/concepts/text#custom-emojis" rel="nofollow noopener noreferrer" target="_blank"><code>customEmoji()</code></a>関数でメッセージに絵文字を含める</li><li><a href="https://botkit.fedify.dev/concepts/text#emoji" rel="nofollow noopener noreferrer" target="_blank">Fedifyの<code>Emoji</code>オブジェクトを<code>text</code>タグテンプレートで使用する</a></li> </ul><p><strong>リアクションによるコミュニケーション</strong></p><p>コミュニケーションは単にメッセージを投稿するだけではありません。他の人のメッセージに反応することも重要です。新しいリアクションシステムは、ボットとフォロワーの間に自然な交流ポイントを作り出します。</p><pre><code>// 標準のUnicode絵文字でメッセージにリアクション await message.react(emoji`👍`); // または定義したカスタム絵文字でリアクション await message.react(emojis.botkit); // リアクションを認識して応答するボットを作成 bot.onReact = async (session, reaction) =&gt; { await session.publish( text`${reaction.actor}さん、私のメッセージに${reaction.emoji}でリアクションしてくれてありがとうございます!`, { visibility: "direct" } ); }; </code></pre><p>この機能により、ボットは次のことができるようになりました。</p><ul> <li><a href="https://botkit.fedify.dev/concepts/message#reacting-to-a-message-with-an-emoji" rel="nofollow noopener noreferrer" target="_blank"><code>Message.react()</code></a>を使用してUnicode絵文字でメッセージにリアクション</li><li>定義したカスタム絵文字でリアクション</li><li><a href="https://botkit.fedify.dev/concepts/events#emoji-reaction" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onReact</code></a>と<a href="https://botkit.fedify.dev/concepts/events#undoing-emoji-reaction" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onUnreact</code></a>ハンドラーでリアクションイベントを処理</li> </ul><p><strong>引用による会話</strong></p><p>議論では、他の人が言ったことを参照する必要がしばしばあります。新しい引用機能により、より結束力のある会話スレッドを作成できます。</p><pre><code>// ボットの投稿で他のメッセージを引用 await session.publish( text`この興味深い視点について答えます...`, { quoteTarget: originalMessage } ); // ユーザーがボットのメッセージを引用した場合の処理 bot.onQuote = async (session, quoteMessage) =&gt; { await session.publish( text`${quoteMessage.actor}さん、私の考えを共有してくれてありがとうございます!`, { visibility: "direct" } ); }; </code></pre><p>引用機能により、ボットは次のことができるようになりました。</p><ul> <li><a href="https://botkit.fedify.dev/concepts/message#quoting" rel="nofollow noopener noreferrer" target="_blank"><code>quoteTarget</code></a>オプションでメッセージを引用</li><li><a href="https://botkit.fedify.dev/concepts/message#quotes" rel="nofollow noopener noreferrer" target="_blank"><code>Message.quoteTarget</code></a>を通じて引用されたメッセージにアクセス</li><li>新しい<a href="https://botkit.fedify.dev/concepts/events#quote" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onQuote</code></a>イベントハンドラーで引用イベントを処理</li> </ul><p><strong>視覚的な改善</strong></p><p>コミュニケーションには視覚的要素も重要なため、ボットの表現方法を改善しました。</p><ul> <li>ウェブインターフェースで画像添付ファイルが正しく表示されるようになりました</li><li>ボットのコンテンツがより見やすくなり、豊かな体験を提供します</li> </ul><p><strong>内部改善:活動の伝播の強化</strong></p><p>フェディバースでの活動が伝播する方法も改善されました。</p><ul> <li>返信、共有、更新、削除のより正確な伝播</li><li>元のメッセージ作成者に活動が適切に送信されます</li> </ul><p>これらの改善により、様々なフェディバースプラットフォームでのボットの相互作用が一貫性と信頼性を持つようになります。</p><p><strong>BotKit 0.2.0で最初の一歩を踏み出す</strong></p><p>これらの新機能を体験してみたいですか?BotKit 0.2.0は<a href="https://jsr.io/@fedify/botkit@0.2.0" rel="nofollow noopener noreferrer" target="_blank">JSR</a>で利用可能で、簡単なコマンドでインストールできます。</p><pre><code>deno add jsr:@fedify/botkit@0.2.0 </code></pre><p>BotKitはTemporal API(JavaScriptではまだ試験的な機能)を使用するため、<em>deno.json</em>でこれを有効にする必要があります。</p><pre><code>{ "imports": { "@fedify/botkit": "jsr:@fedify/botkit@0.2.0" }, "unstable": ["temporal"] } </code></pre><p>これらの簡単なステップで、最新機能を使ってフェディバースボットを作成またはアップグレードする準備が整いました。</p><p><strong>今後の展望</strong></p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/BotKit" target="_blank">#<span>BotKit</span></a> 0.2.0は、フェディバースボット開発をアクセスしやすく、強力かつ楽しいものにするための私たちの継続的な取り組みを示しています。これらの新機能が、皆さんのボットをフェディバースコミュニティでより魅力的でインタラクティブなメンバーにするのに役立つと信じています。</p><p>完全なドキュメントと詳細な例については、私たちの<a href="https://botkit.fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">ドキュメントサイト</a>をご覧ください。</p><p>フィードバック、機能リクエスト、コード貢献を通じてこのリリースに貢献してくださったすべての方々に感謝します。BotKitコミュニティは成長を続けており、皆さんが作成するものを楽しみにしています!</p> <p><em>BotKitは、ActivityPubサーバーアプリケーションを作成するための低レベルフレームワーク<a href="https://fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">Fedify</a>によって支えられています。</em></p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%E3%83%95%E3%82%A7%E3%83%87%E3%82%A3%E3%83%90%E3%83%BC%E3%82%B9" target="_blank">#<span>フェディバース</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E7%B5%B5%E6%96%87%E5%AD%97" target="_blank">#<span>カスタム絵文字</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%E7%B5%B5%E6%96%87%E5%AD%97%E3%83%AA%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3" target="_blank">#<span>絵文字リアクション</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%E7%B5%B5%E6%96%87%E5%AD%97%E5%8F%8D%E5%BF%9C" target="_blank">#<span>絵文字反応</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%E5%BC%95%E7%94%A8" target="_blank">#<span>引用</span></a></p>
BotKit by Fedify :botkit:<p><strong>BotKit 0.2.0 릴리스</strong></p><p><a href="https://botkit.fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">BotKit</a> 0.2.0 버전이 릴리스되었습니다! BotKit을 처음 접하시는 분들을 위해 간단히 소개하자면, BotKit은 TypeScript로 개발된 독립형 <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> 봇 프레임워크입니다. Mastodon, Misskey 등 다양한 <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%97%B0%ED%95%A9%EC%9A%B0%EC%A3%BC" target="_blank">#<span>연합우주</span></a>(<a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a>) 플랫폼과 상호작용할 수 있으며, 기존 플랫폼의 제약에서 벗어나 자유롭게 봇을 만들 수 있습니다.</p><p>이번 릴리스는 연합우주 봇 개발을 더 쉽고 강력하게 만들기 위한 여정에서 중요한 발걸음입니다. 커뮤니티에서 요청해 왔던 여러 기능들을 새롭게 선보입니다.</p><p><strong>더 나은 봇 상호작용을 위한 여정</strong></p><p>BotKit을 개발하면서 우리는 항상 봇이 더 표현력 있고 상호작용이 풍부하도록 만드는 데 집중해 왔습니다. 0.2.0 버전에서는 연합우주의 사회적 측면을 봇에 접목시켜 한 단계 더 발전시켰습니다.</p><p><strong>커스텀 에모지로 봇의 개성 표현하기</strong></p><p>가장 많이 요청받았던 기능 중 하나가 <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%BB%A4%EC%8A%A4%ED%85%80_%EC%97%90%EB%AA%A8%EC%A7%80" target="_blank">#<span>커스텀_에모지</span></a> 지원입니다. 이제 봇은 독특한 시각적 요소로 메시지를 돋보이게 하며 자신만의 개성을 표현할 수 있습니다.</p><pre><code>// 봇의 커스텀 에모지 정의하기 const emojis = bot.addCustomEmojis({ botkit: { file: `${import.meta.dirname}/images/botkit.png`, type: "image/png" }, fedify: { url: "https://fedify.dev/logo.png", type: "image/png" } }); // 메시지에 커스텀 에모지 사용하기 await session.publish( text`BotKit ${customEmoji(emojis.botkit)}은 Fedify ${customEmoji(emojis.fedify)}의 지원을 받습니다` ); </code></pre><p>이 새로운 API를 통해 다음과 같은 기능을 사용할 수 있습니다.</p><ul> <li><code>Bot.addCustomEmojis()</code>로 봇에 커스텀 에모지 추가하기</li><li><a href="https://botkit.fedify.dev/concepts/text#custom-emojis" rel="nofollow noopener noreferrer" target="_blank"><code>customEmoji()</code></a> 함수로 메시지에 에모지 포함하기</li><li><a href="https://botkit.fedify.dev/concepts/text#emoji" rel="nofollow noopener noreferrer" target="_blank">Fedify의 <code>Emoji</code> 객체를 <code>text</code> 태그 템플릿에서 사용하기</a></li> </ul><p><strong>반응을 통한 소통</strong></p><p>소통은 단순히 메시지를 게시하는 것만이 아닙니다. 다른 사람의 메시지에 반응하는 것도 중요합니다. 새로운 반응 시스템은 봇과 팔로워 사이에 자연스러운 상호작용 지점을 만들어 줍니다.</p><pre><code>// 표준 유니코드 에모지로 메시지에 반응하기 await message.react(emoji`👍`); // 또는 정의한 커스텀 에모지로 반응하기 await message.react(emojis.botkit); // 반응을 인식하고 응답하는 봇 만들기 bot.onReact = async (session, reaction) =&gt; { await session.publish( text`${reaction.actor}님, 제 메시지에 ${reaction.emoji} 반응을 남겨주셔서 감사합니다!`, { visibility: "direct" } ); }; </code></pre><p>이 기능을 통해 봇은 다음과 같은 작업을 수행할 수 있습니다.</p><ul> <li><a href="https://botkit.fedify.dev/concepts/message#reacting-to-a-message-with-an-emoji" rel="nofollow noopener noreferrer" target="_blank"><code>Message.react()</code></a>를 사용하여 유니코드 에모지로 메시지에 반응하기</li><li>정의한 커스텀 에모지로 반응하기</li><li><a href="https://botkit.fedify.dev/concepts/events#emoji-reaction" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onReact</code></a>와 <a href="https://botkit.fedify.dev/concepts/events#undoing-emoji-reaction" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onUnreact</code></a> 핸들러로 반응 이벤트 처리하기</li> </ul><p><strong>인용을 통한 대화</strong></p><p>토론에서는 종종 다른 사람이 말한 내용을 참조해야 할 때가 있습니다. 새로운 <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%9D%B8%EC%9A%A9" target="_blank">#<span>인용</span></a> 기능은 더 응집력 있는 대화 스레드를 만들어 줍니다.</p><pre><code>// 봇의 게시물에서 다른 메시지 인용하기 await session.publish( text`이 흥미로운 관점에 대한 답변입니다...`, { quoteTarget: originalMessage } ); // 사용자가 봇의 메시지를 인용할 때 처리하기 bot.onQuote = async (session, quoteMessage) =&gt; { await session.publish( text`${quoteMessage.actor}님, 제 생각을 공유해 주셔서 감사합니다!`, { visibility: "direct" } ); }; </code></pre><p>인용 기능을 통해 봇은 다음과 같은 작업을 수행할 수 있습니다.</p><ul> <li><a href="https://botkit.fedify.dev/concepts/message#quoting" rel="nofollow noopener noreferrer" target="_blank"><code>quoteTarget</code></a> 옵션으로 메시지 인용하기</li><li><a href="https://botkit.fedify.dev/concepts/message#quotes" rel="nofollow noopener noreferrer" target="_blank"><code>Message.quoteTarget</code></a>을 통해 인용된 메시지에 접근하기</li><li>새로운 <a href="https://botkit.fedify.dev/concepts/events#quote" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onQuote</code></a> 이벤트 핸들러로 인용 이벤트 처리하기</li> </ul><p><strong>시각적 개선</strong></p><p>소통은 시각적인 요소도 중요하기 때문에 봇의 표현 방식을 개선했습니다.</p><ul> <li>웹 인터페이스에서 이미지 첨부파일이 제대로 표시됩니다</li><li>봇의 콘텐츠가 더 보기 좋아지고 풍부한 경험을 제공합니다</li> </ul><p><strong>내부 개선: 향상된 액티비티 전파</strong></p><p>연합우주에서 액티비티가 전파되는 방식도 개선했습니다.</p><ul> <li>답글, 공유, 업데이트, 삭제의 더 정확한 전파</li><li>원본 메시지 작성자에게 액티비티가 제대로 전송됩니다</li> </ul><p>이러한 개선 사항은 다양한 연합우주 플랫폼에서 봇의 상호작용이 일관되고 안정적으로 이루어지도록 보장합니다.</p><p><strong>BotKit 0.2.0으로 첫 걸음 떼기</strong></p><p>이러한 새로운 기능을 경험해 보고 싶으신가요? BotKit 0.2.0은 <a href="https://jsr.io/@fedify/botkit@0.2.0" rel="nofollow noopener noreferrer" target="_blank">JSR</a>에서 받을 수 있으며 간단한 명령어로 설치할 수 있습니다.</p><pre><code>deno add jsr:@fedify/botkit@0.2.0 </code></pre><p>BotKit은 Temporal API(JavaScript에서 아직 시범적인 기능)를 사용하므로 <em>deno.json</em>에서 이를 활성화해야 합니다.</p><pre><code>{ "imports": { "@fedify/botkit": "jsr:@fedify/botkit@0.2.0" }, "unstable": ["temporal"] } </code></pre><p>이 간단한 단계를 통해 최신 기능으로 연합우주 봇을 만들거나 업그레이드할 준비가 완료되었습니다.</p><p><strong>앞으로의 전망</strong></p><p>BotKit 0.2.0은 연합우주 봇 개발을 접근하기 쉽고, 강력하며, 즐겁게 만들기 위한 우리의 지속적인 노력을 보여줍니다. 이러한 새로운 기능들이 여러분의 봇이 연합우주 커뮤니티에서 더 매력적이고 상호작용이 풍부한 구성원이 되는 데 도움이 될 것이라고 믿습니다.</p><p>전체 문서와 더 많은 예제는 저희 <a href="https://botkit.fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">문서 사이트</a>에서 확인하실 수 있습니다.</p><p>피드백, 기능 요청, 코드 기여를 통해 이번 릴리스에 도움을 주신 모든 분들께 감사드립니다. BotKit 커뮤니티는 계속 성장하고 있으며, 여러분이 만들어낼 작품들을 기대합니다!</p> <p><em>BotKit은 ActivityPub 서버 애플리케이션을 만들기 위한 하위 레벨 프레임워크인 <a href="https://fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">Fedify</a>의 지원을 받습니다.</em></p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%BB%A4%EB%AA%A8%EC%A7%80" target="_blank">#<span>커모지</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%BB%A4%EC%8A%A4%ED%85%80_%EC%9D%B4%EB%AA%A8%EC%A7%80" target="_blank">#<span>커스텀_이모지</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%97%90%EB%AA%A8%EC%A7%80_%EB%B0%98%EC%9D%91" target="_blank">#<span>에모지_반응</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%9D%B4%EB%AA%A8%EC%A7%80_%EB%B0%98%EC%9D%91" target="_blank">#<span>이모지_반응</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%97%90%EB%AA%A8%EC%A7%80_%EB%A6%AC%EC%95%A1%EC%85%98" target="_blank">#<span>에모지_리액션</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/%EC%9D%B4%EB%AA%A8%EC%A7%80_%EB%A6%AC%EC%95%A1%EC%85%98" target="_blank">#<span>이모지_리액션</span></a></p>
BotKit by Fedify :botkit:<p><strong>BotKit 0.2.0 Released</strong></p><p>We're pleased to announce the release of <a href="https://botkit.fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">BotKit</a> 0.2.0! For those new to our project, <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/BotKit" target="_blank">#<span>BotKit</span></a> is a <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/TypeScript" target="_blank">#<span>TypeScript</span></a> framework for creating standalone <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> bots that can interact with Mastodon, Misskey, and other <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fediverse" target="_blank">#<span>fediverse</span></a> platforms without the constraints of these existing platforms.</p><p>This release marks an important step in our journey to make fediverse bot development more accessible and powerful, introducing several features that our community has been requesting.</p><p><strong>The Journey to Better Bot Interactions</strong></p><p>In building BotKit, we've always focused on making bots more expressive and interactive. With version 0.2.0, we're taking this to the next level by bringing the social aspects of the fediverse to your bots.</p><p><strong>Expressing Your Bot's Personality with Custom Emojis</strong></p><p>One of the most requested features has been <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/custom_emoji" target="_blank">#<span>custom_emoji</span></a> support. Now your bots can truly express their personality with unique visuals that make their messages stand out.</p><pre><code>// Define custom emojis for your bot const emojis = bot.addCustomEmojis({ botkit: { file: `${import.meta.dirname}/images/botkit.png`, type: "image/png" }, fedify: { url: "https://fedify.dev/logo.png", type: "image/png" } }); // Use these custom emojis in your messages await session.publish( text`BotKit ${customEmoji(emojis.botkit)} is powered by Fedify ${customEmoji(emojis.fedify)}` ); </code></pre><p>With this new API, you can:</p><ul> <li>Add custom emojis to your bot with <code>Bot.addCustomEmojis()</code></li><li>Include these emojis in messages with the <a href="https://botkit.fedify.dev/concepts/text#custom-emojis" rel="nofollow noopener noreferrer" target="_blank"><code>customEmoji()</code></a> function</li><li><a href="https://botkit.fedify.dev/concepts/text#emoji" rel="nofollow noopener noreferrer" target="_blank">Use the <code>text</code> tagged template with Fedify <code>Emoji</code> objects</a></li> </ul><p><strong>Engaging Through Reactions</strong></p><p>Communication isn't just about posting messages—it's also about responding to others. The new reaction system creates natural interaction points between your bot and its followers:</p><pre><code>// React to a message with a standard Unicode emoji await message.react(emoji`👍`); // Or use one of your custom emojis as a reaction await message.react(emojis.botkit); // Create a responsive bot that acknowledges reactions bot.onReact = async (session, reaction) =&gt; { await session.publish( text`Thanks for reacting with ${reaction.emoji} to my message, ${reaction.actor}!`, { visibility: "direct" } ); }; </code></pre><p>This feature allows your bot to:</p><ul> <li>React to messages with Unicode emojis using <a href="https://botkit.fedify.dev/concepts/message#reacting-to-a-message-with-an-emoji" rel="nofollow noopener noreferrer" target="_blank"><code>Message.react()</code></a></li><li>React with the custom emojis you've defined</li><li>Handle reaction events with <a href="https://botkit.fedify.dev/concepts/events#emoji-reaction" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onReact</code></a> and <a href="https://botkit.fedify.dev/concepts/events#undoing-emoji-reaction" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onUnreact</code></a> handlers</li> </ul><p><strong>Conversations Through Quotes</strong></p><p>Discussions often involve referencing what others have said. Our new <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/quote" target="_blank">#<span>quote</span></a> support enables more cohesive conversation threads:</p><pre><code>// Quote another message in your bot's post await session.publish( text`Responding to this interesting point...`, { quoteTarget: originalMessage } ); // Handle when users quote your bot's messages bot.onQuote = async (session, quoteMessage) =&gt; { await session.publish( text`Thanks for sharing my thoughts, ${quoteMessage.actor}!`, { visibility: "direct" } ); }; </code></pre><p>With quote support, your bot can:</p><ul> <li>Quote messages with <a href="https://botkit.fedify.dev/concepts/message#quoting" rel="nofollow noopener noreferrer" target="_blank"><code>quoteTarget</code></a> option</li><li>Access quoted messages via <a href="https://botkit.fedify.dev/concepts/message#quotes" rel="nofollow noopener noreferrer" target="_blank"><code>Message.quoteTarget</code></a></li><li>Handle quote events with the new <a href="https://botkit.fedify.dev/concepts/events#quote" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onQuote</code></a> event handler</li> </ul><p><strong>Visual Enhancements</strong></p><p>Because communication is visual too, we've improved how your bot presents itself:</p><ul> <li>Image attachments now properly display in the web interface</li><li>Your bot's content looks better and provides a richer experience</li> </ul><p><strong>Behind the Scenes: Enhanced Activity Propagation</strong></p><p>We've also improved how activities propagate through the fediverse:</p><ul> <li>More precise propagation of replies, shares, updates, and deletes</li><li>Activities are now properly sent to the original message authors</li> </ul><p>These improvements ensure your bot's interactions are consistent and reliable across different fediverse platforms.</p><p><strong>Taking Your First Steps with BotKit 0.2.0</strong></p><p>Ready to experience these new features? BotKit 0.2.0 is available on <a href="https://jsr.io/@fedify/botkit@0.2.0" rel="nofollow noopener noreferrer" target="_blank">JSR</a> and can be installed with a simple command:</p><pre><code>deno add jsr:@fedify/botkit@0.2.0 </code></pre><p>Since BotKit uses the Temporal API (which is still evolving in JavaScript), remember to enable it in your <em>deno.json</em>:</p><pre><code>{ "imports": { "@fedify/botkit": "jsr:@fedify/botkit@0.2.0" }, "unstable": ["temporal"] } </code></pre><p>With these simple steps, you're ready to create or upgrade your fediverse bot with our latest features.</p><p><strong>Looking Forward</strong></p><p>BotKit 0.2.0 represents our ongoing commitment to making fediverse bot development accessible, powerful, and enjoyable. We believe these new features will help your bots become more engaging and interactive members of the fediverse community.</p><p>For complete docs and more examples, visit our <a href="https://botkit.fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">docs site</a>.</p><p>Thank you to everyone who contributed to this release through feedback, feature requests, and code contributions. The BotKit community continues to grow, and we're excited to see what you'll create!</p> <p><em>BotKit is powered by <a href="https://fedify.dev/" rel="nofollow noopener noreferrer" target="_blank">Fedify</a>, a lower-level framework for creating ActivityPub server applications.</em></p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/emoji_reaction" target="_blank">#<span>emoji_reaction</span></a></p>
BotKit by Fedify :botkit:<p>Coming soon in <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/BotKit" target="_blank">#<span>BotKit</span></a> 0.2.0: Native <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/quote" target="_blank">#<span>quote</span></a> post support!</p><p>We're excited to share a preview of the upcoming quoting features in BotKit 0.2.0. This update will make it easier for your bots to engage with quoted content across the fediverse.</p><p>The quoting feature set includes:</p><ul> <li>Detecting when someone quotes your bot's posts with the new <a href="https://botkit.fedify.dev/concepts/events#quote" rel="nofollow noopener noreferrer" target="_blank"><code>Bot.onQuote</code></a> event handler</li><li>Accessing quoted content through the <a href="https://botkit.fedify.dev/concepts/message#quotes" rel="nofollow noopener noreferrer" target="_blank"><code>Message.quoteTarget</code></a> property</li><li>Creating quote posts using the <a href="https://botkit.fedify.dev/concepts/message#quoting" rel="nofollow noopener noreferrer" target="_blank"><code>quoteTarget</code></a> option in <a href="https://botkit.fedify.dev/concepts/message#publishing-a-message" rel="nofollow noopener noreferrer" target="_blank"><code>Session.publish()</code></a> and <a href="https://botkit.fedify.dev/concepts/message#replying-to-a-message" rel="nofollow noopener noreferrer" target="_blank"><code>Message.reply()</code></a> methods</li> </ul><p>Here's a quick example of how you can use the quote detection:</p><pre><code>bot.onQuote = async (session, quote) =&gt; { // The quote parameter is a Message object representing the post that quoted your bot await quote.reply(text`Thanks for quoting my post, ${quote.actor}!`); // You can access the original quoted message const originalPost = quote.quoteTarget; console.log(`Original message: ${originalPost?.text}`); }; </code></pre><p>And creating quote posts is just as simple:</p><pre><code>// Quote in a new post await session.publish( text`I'm quoting this interesting message!`, { quoteTarget: someMessage } ); // Or quote in a reply await message.reply( text`Interesting point! I'm quoting another relevant post here.`, { quoteTarget: anotherMessage } ); </code></pre><p>Remember that quoting behavior may vary across different <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> implementations—some platforms like Misskey display quotes prominently, while others like Mastodon might implement them differently.</p><p>Want to try these features right now? You can install the development version from <a href="https://jsr.io/@fedify/botkit@0.2.0-dev.90+d6ab4bdc" rel="nofollow noopener noreferrer" target="_blank">JSR</a>:</p><pre><code>deno add jsr:@fedify/botkit@0.2.0-dev.90+d6ab4bdc </code></pre><p>We're looking forward to seeing how you use these quoting capabilities in your bots!</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a></p>
BotKit by Fedify :botkit:<p>We're excited to introduce <a href="https://botkit.fedify.dev/concepts/message#reacting-to-a-message-with-an-emoji" rel="nofollow noopener noreferrer" target="_blank">emoji reactions</a> in the upcoming <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/BotKit" target="_blank">#<span>BotKit</span></a> 0.2.0 release!</p><p>With the new <a href="https://jsr.io/@fedify/botkit@0.2.0-dev.84+c997c6a6/doc/message/~/Message.react" rel="nofollow noopener noreferrer" target="_blank"><code>Message.react()</code></a> method, your bot can now react to messages using standard Unicode <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/emojis" target="_blank">#<span>emojis</span></a>:</p><pre><code>await message.react(emoji`👍`); </code></pre><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/Custom_emoji" target="_blank">#<span>Custom_emoji</span></a> support is also included, allowing your bot to react with server-specific emojis:</p><pre><code>const emojis = bot.addCustomEmojis({ // Use a remote image URL: yesBlob: { url: "https://cdn3.emoji.gg/emojis/68238-yesblob.png", mediaType: "image/png", }, // Use a local image file: noBlob: { file: `${import.meta.dirname}/emojis/no_blob.png`, mediaType: "image/webp", }, }); await message.react(emojis.yesBlob); </code></pre><p>Reactions can be removed using the <a href="https://jsr.io/@fedify/botkit@0.2.0-dev.84+c997c6a6/doc/reaction/~/AuthorizedReaction.unreact" rel="nofollow noopener noreferrer" target="_blank"><code>AuthorizedReaction.unreact()</code></a> method:</p><pre><code>const reaction = await message.react(emoji`❤️`); await reaction.unreact(); </code></pre><p>Want to try these features now? You can install the development version from <a href="https://jsr.io/@fedify/botkit@0.2.0-dev.84+c997c6a6" rel="nofollow noopener noreferrer" target="_blank">JSR</a> today:</p><pre><code>deno add jsr:@fedify/botkit@0.2.0-dev.84+c997c6a6 </code></pre><p>We're looking forward to seeing how your bots express themselves with this new feature!</p><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/emoji_reaction" target="_blank">#<span>emoji_reaction</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a></p>
BotKit by Fedify :botkit:<p>We're excited to announce that <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/BotKit" target="_blank">#<span>BotKit</span></a> 0.2.0 will introduce <a href="https://botkit.fedify.dev/concepts/text#custom-emojis" rel="nofollow noopener noreferrer" target="_blank">custom emoji support</a>! This feature allows your bots to express themselves with more personality and engagement.</p><p>What's included:</p><ul> <li>Add custom emojis to your bot with <code>Bot.addCustomEmojis()</code></li><li>Use emoji in messages with the <code>customEmoji()</code> function</li><li>Support for both local image files and remote URLs as emoji sources</li><li>Full integration with BotKit's <a href="https://botkit.fedify.dev/concepts/text" rel="nofollow noopener noreferrer" target="_blank">text formatting system</a></li> </ul><p>Simple example:</p><pre><code>// Define custom emojis const emojis = bot.addCustomEmojis({ botkit: { file: "./botkit.png", type: "image/png" }, fedify: { url: "https://fedify.dev/logo.png", type: "image/png" } }); // Use in messages await session.publish( text`Hello world! ${customEmoji(emojis.botkit)}` ); </code></pre><p>Want to try it early? You can install the development version from <a href="https://jsr.io/@fedify/botkit@0.2.0-dev.82+8a0438e6" rel="nofollow noopener noreferrer" target="_blank">JSR</a> today:</p><pre><code>deno add jsr:@fedify/botkit@0.2.0-dev.82+8a0438e6 </code></pre><p><a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/ActivityPub" target="_blank">#<span>ActivityPub</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/fedidev" target="_blank">#<span>fedidev</span></a> <a class="mention hashtag" rel="nofollow noopener noreferrer" href="https://hollo.social/tags/custom_emoji" target="_blank">#<span>custom_emoji</span></a></p>