You are browsing as a guest. Sign up (or log in) to start making projects!

AdaChan

@AdaChan

Joined June 5th, 2026

  • 51Devlogs
  • 9Projects
  • 6Ships
  • 41Votes
Hey! Do the dance!
Ship

I made Koizinho, a Slack bot with several fun and useful commands. Some of my favorite commands are /koi-user, which generates a card with information about a selected user, /koi-sound, which lets you choose and listen to animal sounds, and /koi-tts, which converts text into spoken audio.

The most challenging part was definitely /koi-user. I wanted the bot to generate a custom image with information about a user, but working with Canvas in JavaScript was much harder than I expected. I ran into a lot of errors, especially with positioning and generating the image correctly. I also experimented with Python and JavaScript communicating with each other before eventually deciding to keep the image generation in JavaScript. There were many moments where fixing one error somehow created another one. 😭

I’m proud that I managed to keep working on the project even when some parts became really frustrating. I learned a lot about Slack commands, modals, APIs, image generation, audio, and organizing a larger JavaScript project. /koi-user was especially satisfying because it went from being a huge mess of errors to actually working.

  • 15 devlogs
  • 17h
  • 4.36x multiplier
  • 75 Stardust
Try project → See source code →
Open comments for this post

3h 40m 7s logged

DevLog #22

I finally got it working. I discovered the error was in how the commands were being loaded, since they were all being loaded from a “commands” folder via index.js, they were taking too long to respond; because of the response time limit, an error kept popping up. I managed to fix it, though, and now it works =) I also fixed some bugs in other commands.

0
0
7
Open comments for this post

39m 21s logged

DevLog #21

I made some adjustments, I think I’ll rewrite some of the bot’s commands, I fixed some existing errors (and created others =( unfortunately). But I think it’s getting better now.

0
0
12
Open comments for this post

28m 27s logged

DevLog #20

I updated the project’s README; it remains quite simple because the bot is also simple, haha. I gave up on the /koi-user command for now, it was giving me too many headaches, so I’ll leave it for later.

0
0
18
Open comments for this post

25m 26s logged

DevLog #19

I created a command called /koi-help that lists all the bot’s available commands. This will be useful since we already have quite a few commands; I plan to replace that wall of text with a menu where the user can choose a category (general, animals, utilities, games), and the bot will respond with the commands for that category to avoid cluttering the chat.

0
0
16
Open comments for this post

1h 15m 1s logged

DevLog #18

So… this command is really frustrating me; every time I fix something, another error pops up, and I don’t know what to do. At least most of it is already done. I hope I can sort this out soon.

1
0
57
Open comments for this post

1h 4m 48s logged

DevLog #17

Still struggling with this command (/koi-user), it was supposed to be ‘easy,’ but I just ended up complicating the code even further. Well, I’m still trying to organize the elements in the image and fix an error that prevents the bot from sending the card to the user, it’s getting really annoying (why does JS have to be like this?). I hope to finish this command soon; maybe DevLog 18 will be about that, but for now, I’ll keep working on it 🥀🙏

4
0
110
Open comments for this post

23m 36s logged

DevLog #16

Fixing bugs again. I gave up on using Python + JavaScript; honestly, it was getting too difficult. Now I need to sort out the positioning, because when I was porting the code from Python to JS, the elements ended up out of place. I’m not sure if Python and JS handle image pixels differently.

0
0
20
Open comments for this post

32m 7s logged

DevLog #15

I’m reviewing some commands I’ve already implemented and fixing a few issues. Strangely, the bot is taking a while to respond; it keeps displaying the message /koi-calc failed because the app did not respond... repeatedly, yet a few seconds later, the bot actually executes the command which is really odd.

0
0
12
Open comments for this post

51m 44s logged

DevLog #14

Today I added two more simple commands /koi-rps and /koi-calc. /koi-calc actually already existed, but I had ended up deleting it.

/koi-rps is a small Rock, Paper, Scissors game. The user chooses rock, paper, or scissors, and Koizinho makes a random choice. Then, the bot compares the two choices and announces whether the player won, lost, or tied.

0
0
8
Open comments for this post

26m 39s logged

DevLog #12

I discovered that it’s possible to make .py and .js interact with each other. Now I’m learning how this communication works and trying not to explode in the process. XD

0
0
10
Open comments for this post

1h 31m 59s logged

DevLog #11

Well, I finally finished the Easy-PIL part in Python! The card is ready now.

I also set up the system so that data is automatically populated based on a JSON file. When someone uses the /koi-user command, it generates a JSON file with the selected user’s information, and then the Python script uses that data to create the card.

I designed the card myself in Canva. I spent way too much time on something so simple XD, but I really liked the result!

0
0
8
Open comments for this post

2h 12m 54s logged

DevLog #10

I’m changing the user info card. I’m now using Python to generate the images. Honestly, using the JS Canvas is a real pain, and Python’s Easy-PIL turns out to be much easier. Now, the tricky part will be handling the communication between the .js and .py files.

0
0
10
Open comments for this post

1h 23m 34s logged

DevLog #9

I’m developing a new command called /koi-user. It displays information about the user you choose.

Since the arguments of slash commands in Slack aren’t very organized (in the sense of having defined types), I had to work around the problem. In Discord, for example, you can define an argument as user_mention, so Discord itself understands that it’s a user.

In Slack, it doesn’t work that way. You can’t even pass a mention as an argument to the command, lol.

So the solution I found was to create a modal. When you use the command, a window opens with all the users in the workspace, and you can search by name or choose one from the list. After sending, the bot generates an image with some user information and sends the result to you.

(Some text is still in Portuguese because I haven’t translated everything into English yet. ;-;)

0
0
34
Open comments for this post

1h 11m 8s logged

DevLog #8

I decided to continue developing the bot, so here’s what I’ve done since the last update:

1. Code organization

I improved the project’s organization by separating command groups into different files.

Now, each file has a specific responsibility:

  • animals → animal-related commands, such as /koi-duck, /koi-cat, /koi-dog, and others.
  • space → space-related commands, such as /koi-apod. I plan to add more commands in this category later.
  • utility → general commands, such as /koi-say and /koi-tts.

This has made the code much easier to maintain and allows for easier addition of new features.

2. Loading system for responses

One thing that really bothered me was when a command took a while to respond.

On Discord, when a bot is processing something, a “Bot is thinking…” message appears while it works. I couldn’t find an exact equivalent on Slack, so I decided to create my own system.

Now, some commands send a loading message first—for example:

🦆 Looking for a duck…

Once the command finishes, that message is updated with the final response.

This makes for a much better experience; before, it used to look like the bot had stopped working lol.

3. Direct messages with the bot

I finally managed to enable DMs for the bot!

Now you can chat directly with Koizinho in private. It can already respond to simple messages, for example:

User: Hi!
Koizinho: Hello!

I still want to improve this part. Maybe I’ll add some form of AI or a smarter conversation system in the future.

0
0
11
Open comments for this post

55m 20s logged

DevLog #12

Just testing a few things out.

Basically, Svelte is very easy to understand, especially compared to the vanilla JavaScript I was using before. But there are quite a few things that are different.

0
0
11
Open comments for this post

23m 58s logged

DevLog #11

I’m thinking about using Svelte to rewrite my entire WebOS simulator. I believe it will make the code much more organized, simplify maintenance, and speed up development compared to the current project.

0
0
23
Open comments for this post

29m 30s logged

DevLog #10

Writing code… that’s about it.

I decided to rewrite the WebOS from scratch and completely change its style. There isn’t much to show yet, but I hope the result will be worth it.

0
0
10
Ship

I created an APOD (Astronomy Picture of the Day) website. It has four pages: the “Home” page, which features a feed of API data (displaying photos from newest to oldest); a “Search” tab, where you can look up a photo by a specific date; a “Favorites” tab, where you can view photos saved while browsing the feed or the daily view (to favorite a photo, simply click the heart icon below the image—the icon changes color! ;D); and finally, a “Daily” page, where you can view the current day’s photo. Things might take a little while to load, especially on the feed and search pages.

Try project → See source code →
Loading more…

Followers

Loading…