“If you have good friends, no matter how much life is sucking , they can make you laugh.” ~ P. C. Cast
quote
“The mind can go in a thousand directions, but on this beautiful path, I walk in peace. With each step, the wind blows. With each step, a flower blooms.” ~ Thich Nhat Hanh
"Life is a hard battle anyway. If we laugh and sing a little as we fight the good fight of freedom, it makes it all go easier. I will not allow my life's light to be determined by the darkness around me." ~ Sojourner Truth
BotKit 0.2.0 Released
We're pleased to announce the release of BotKit 0.2.0! For those new to our project, #BotKit is a #TypeScript framework for creating standalone #ActivityPub bots that can interact with Mastodon, Misskey, and other #fediverse platforms without the constraints of these existing platforms.
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.
The Journey to Better Bot Interactions
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.
Expressing Your Bot's Personality with Custom Emojis
One of the most requested features has been #custom_emoji support. Now your bots can truly express their personality with unique visuals that make their messages stand out.
// Define custom emojis for your botconst 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 messagesawait session.publish( text`BotKit ${customEmoji(emojis.botkit)} is powered by Fedify ${customEmoji(emojis.fedify)}`);
With this new API, you can:
Add custom emojis to your bot with Bot.addCustomEmojis()
Include these emojis in messages with the customEmoji() function
Use the text tagged template with Fedify Emoji objects
Engaging Through Reactions
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:
// React to a message with a standard Unicode emojiawait message.react(emoji`👍`);// Or use one of your custom emojis as a reactionawait message.react(emojis.botkit);// Create a responsive bot that acknowledges reactionsbot.onReact = async (session, reaction) => { await session.publish( text`Thanks for reacting with ${reaction.emoji} to my message, ${reaction.actor}!`, { visibility: "direct" } );};
This feature allows your bot to:
React to messages with Unicode emojis using Message.react()
React with the custom emojis you've defined
Handle reaction events with Bot.onReact and Bot.onUnreact handlers
Conversations Through Quotes
Discussions often involve referencing what others have said. Our new #quote support enables more cohesive conversation threads:
// Quote another message in your bot's postawait session.publish( text`Responding to this interesting point...`, { quoteTarget: originalMessage });// Handle when users quote your bot's messagesbot.onQuote = async (session, quoteMessage) => { await session.publish( text`Thanks for sharing my thoughts, ${quoteMessage.actor}!`, { visibility: "direct" } );};
With quote support, your bot can:
Quote messages with quoteTarget option
Access quoted messages via Message.quoteTarget
Handle quote events with the new Bot.onQuote event handler
Visual Enhancements
Because communication is visual too, we've improved how your bot presents itself:
Image attachments now properly display in the web interface
Your bot's content looks better and provides a richer experience
Behind the Scenes: Enhanced Activity Propagation
We've also improved how activities propagate through the fediverse:
More precise propagation of replies, shares, updates, and deletes
Activities are now properly sent to the original message authors
These improvements ensure your bot's interactions are consistent and reliable across different fediverse platforms.
Taking Your First Steps with BotKit 0.2.0
Ready to experience these new features? BotKit 0.2.0 is available on JSR and can be installed with a simple command:
deno add jsr:@fedify/botkit@0.2.0
Since BotKit uses the Temporal API (which is still evolving in JavaScript), remember to enable it in your deno.json:
{ "imports": { "@fedify/botkit": "jsr:@fedify/botkit@0.2.0" }, "unstable": ["temporal"]}
With these simple steps, you're ready to create or upgrade your fediverse bot with our latest features.
Looking Forward
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.
For complete docs and more examples, visit our docs site.
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!
BotKit is powered by Fedify, a lower-level framework for creating ActivityPub server applications.
“Where justice is denied, where poverty is enforced, where ignorance prevails, and where any one class is made to feel that society is an organized conspiracy to oppress, rob and degrade them, neither persons nor property will be safe.” ~ Frederick Douglass
“When adversity strikes, you have two choices: Let the adversity define, destroy, or strengthen you. Your reaction is what will determine your destiny.” ~ Serena Williams
“We should always be looking for the unity in things instead of the differences.” ~ Genesis P-Orridge
"Gratitude unlocks the fullness of life. It turns what we have into enough, and more. It turns denial into acceptance, chaos to order, confusion to clarity. It can turn a meal into a feast, a house into a home, a stranger into a friend." ~ Melody Beattie
"All respect for the office of the presidency aside, I assumed that the obvious and unadulterated decline of freedom and constitutional sovereignty, not to mention the efforts to curb the power of judicial review, spoke for itself." ~ Ruth Bader Ginsburg
"No dictator can last forever. History shows that in the end, people around the dictator bring about change. Of course, a lot of high-ranking officials don't want change because they want to keep power. But there are other good people who want change. I believe they are waiting for the chance." ~ Lee Hyeon-seo
“I am no longer accepting the things I cannot change. I am changing the things I cannot accept.” ~ Angela Davis
“If a person seems wicked, do not cast him away. Awaken him with your words, elevate him with your deeds, repay his injury with your kindness. Do not cast him away; cast away his wickedness.” ~ Lao-Tzu
“Those we love and lose are always connected by heartstrings into infinity." ~ Terri Guillemets
“Democracy is not just the right to vote; it is the right to live in dignity.” ~ Naomi Klein
"When indeed shall we learn that we are all related one to the other, that we are all members of one body? Until the spirit of love for our fellow people, regardless of race, color, or creed, shall fill the world, making real in our lives and our deeds the actuality of human brother- and sisterhood, until the great mass of the people shall be filled with the sense of responsibility for each other's welfare, social justice can never be attained." ~ Helen Keller
"In search of my mother's garden, I found my own." ~ Alice Walker
"I am only one,
But still I am one.
I cannot do everything,
But still I can do something;
And because I cannot do everything,
I will not refuse to do the something that I can do." ~ Helen Keller
"[...] until the basic human rights are equally guaranteed to all without regard to race, there is war. And until that day, the dream of lasting peace, world citizenship, rule of international morality, will remain but a fleeting illusion to be pursued, but never attained... now everywhere is war.”
- Haile Selassie (1963)
Bob Marley - WAR (live -1979)
https://www.youtube.com/watch?v=loFDn94oZJ0
"Aging is not lost youth but a new stage of opportunity and strength." ~ Betty Friedan
"I love to dance because I was scared to speak. When I was moving, I could feel." – Pina Bausch
“If your life is cloudy and you’re far, far off course, you may have to go on faith for a while, but eventually you’ll learn that every time you trust your internal navigation system, you end up closer to your right life.” ~ Martha Beck
”You may shoot me with your words, you may cut me with your eyes, you may kill me with your hatefulness, but still, like air, I’ll rise.” ~ Maya Angelou
"The mother's battle for her child with sickness, with poverty, with war, with all the forces of exploitation and callousness that cheapen human life needs to become a common human battle, waged in love and in the passion for survival." ~ Adrienne Rich
"Just living is not enough… one must have sunshine, freedom, and a little flower." ~ Hans Christian Andersen