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

stefdp

@stefdp

Joined May 31st, 2026

  • 77Devlogs
  • 6Projects
  • 4Ships
  • 61Votes
idk, I just do stuff, also check out my website: https://stefdp.com !
Open comments for this post

7h 8m logged

  • Added the /tag command: save preset messages that you can then send later (they can also contain embeds)
    it has the following subcommands:
  • content: set or remove the content of a tag
  • embed: add or remove an embed from a tag
  • delete: delete a tag
  • export: export all your tags as a JSON file
  • import: import the JSON file obtained from the export subcommand (in case of conflicts, the old and new tag will be previeable in the bot dashboard if enabled)
  • list: Display all your subcommands
  • get: Get the content & embeds of a specific subcommand
  • Fixed/Impoved the /embed command button & modal handlers & added an ID to buttons & modals to avoid 2 diff commands handling the same interaction
0
0
70
Open comments for this post

5h 34m 59s logged

  • Created the /gary command: get random images of 4 cats: Gary, Goober, Gulliber (Gully) and Garfield
  • Created the /ping command: get the bot’s ping (pic has high ping cuz it’s running on my laptop, in Italy)
  • Created the /botavatar command: change the bot avatar, either from a file, URL, copy from an user or copy from the bot owner
  • Created the /colorpicker command: give an HEX, RGB or HSL color and it displays it as well as showing its HEX, RGB and HSL variants
  • Added the /reminders command: set a reminder and the bot will send you a DM, reminder can either be single-run, multi-run and inifinitely run (the user defines an interval such as 30m, 2d15h etc., then the bot will send a DM with the reminder after this interval and will repeat it how many times the user defined it to, so if an user defines a reminder with 2h interval and 3 repeats, it will send the same reminder in 2h, 4h and 6h) (hope i explained well :pf: )
  • Switched database initialization from SchemaUtils to MigrationUtils this way if i edit a scheme, it’s also applied at startup instead of just creating new tables and never modifying them
  • Made the dashboard disableable
0
0
14
Open comments for this post

6h 31m 19s logged

  • Created the /minecraft command: allows to fetch
  1. Java and Bedrock edition server data (with mcstatus.io API)
  2. Player info (with Starlight API by lunareclipse.studio)
  3. Player skin rendered as a 3D model in different poses (with Starlight API)
  • Created the /embed command: send anything as an embed
  • Created the /qr command: encode some text into a QR Code (output can be an image or an ASCII text)
  • Updated the dashboard to add a static resource /skinModels which is used for the /minecraft skin sub command to fetch custom made models
  • Added a regex for HEX colors (matches #ffffff, #fff, ffffff and fff)
  • created a Minecraft object to collect all minecraft related functions
  • Created the starlight and mcstatus.io API services & added them in the API client
  • Update main handleRequest function to add an optional error handler
0
0
14
Open comments for this post

3h 35m 34s logged

  • Added the /8ball command: ask a question and get a random answer
  • Added topic command: get a random topic to start a conversation
  • Added /qalc command: execute calculation using libqalculate
  • Added /console command: run any shell command
  • Added /animal command: get a random animal (cat, dog, fox, duck)
  • Added /ip command: get info about an IPv4 or IPv6 address
  • Installed the retrofit libs required to make HTTP requests
  • Added a regex to check if a IPv4 or IPv6 is valid (took from networkingtoolbox.net)
  • Created util function to get the country flag & name from its code (took from my Hackatime android app)
0
0
18
Open comments for this post

5h 57m 19s logged

  • Added /http command: get a HTTP status with the picture of an animal like cat, dog, goat, duck etc.
  • Added /perms command: add/remove/list the users allowed to use a specific command
  • Added /status command: enable/disable specific commands
  • Added /dig: perform a dig query on a domain
  • Added /whois: perform a WHOIS query on a domain/IP/ASN
  • Fixed database upsert function erroring because no column was being passed as keys (primary)
  • Moved command registration to the onReady event
  • Installed a lib for DNS queries and a lib to check other libs updates
  • Added a utility Domain object that contains the function to perform dig and whois queries
  • Added utility functions to convert a ISO string, epoch seconds or Instant to discord time format
0
0
17
Open comments for this post

3h 32m 5s logged

  • Created the /eval command
  • Added the registration & handling of the commands (also checks if the user can run the command and if the command is enabled, by checking the enabled status and allowedUsers list in the command_permissions table)
  • Installed some libs to run code at runtime (JavaScript, Python and Kotlin (used in /eval)
0
0
7
Open comments for this post

4h 51m 22s logged

Created the base skeleton with the bot (w/ events), web dashboard (rn just shows “WIP” text) and database with the schemes & some helper functions


For the Discord bot i’m using the Kord library
For the web dashboard i’m using the Ktor library
This is the first time i use either of those 2 libs so my usage may not be the best :pf:

0
0
11
Open comments for this post

4h 8m 45s logged

  • Added the leaderboard screen
  • Took Pager, PullToRefresh and TextInput components from my other apps
  • Added pull to refresh in all screens (goals, home, projects & leaderboard (for leaderboard u gotta do it specifically on the leaderboard, not outside))
  • Fixed a crash when opening a project git repo
  • Fixed login failing to send the API key to the server because i had put it before actually storing the access token so it would error with “Missing access token”
  • installed a lib to load images form the network (used for the avatars in the leaderboard)
  • Improved the .shimmerable modifier
  • Improved spacing in the settings save buttons between the text and the icon/loading spinner
  • Fixed backend API’s sendApiKey function using wrong tag in logging
0
0
12
Open comments for this post

2h 20m 18s logged

  • Fixed the missing types so now the app builds
  • Updated all HTTP requests that needed an API key so instead of only fetching it, they also cache it
  • Added a HTTP request to revoke the Hackatime OAuth2 access token which is used on logout
  • Added waterfall padding to the Header component (waterfall padding is a larger horizontal padding for phones that have rounded/curved screen edges)
  • Moved LoginScreen, ProjectsScreen, GoalsScreen and SettingsScreen to viewModel
  • Added a scrollbar in all scrollable screens (took the scrollbar code from my other apps)
  • Added the Notification object (this too took from ym other apps)
  • Added base skeleton for the leaderboard tab (just shows “WIP”)

GL to the GOIs, the commits for this devlogs were a mess cuz i made alot of changes at once and then tried to split it in multiple commits to avoid making a huge one 😭 🥀

0
0
54
Open comments for this post

6h 16m 57s logged

  • Switched login to Hackatime OAuth2 (untested)
  • Moved MainActivity to use a viewModel and update the FCM registering
  • Moved HomeScreen to use a viewModel
  • Added a custom Logger class (taken from my other apps)
  • Entirely rewritten the API endpoints using the new API docs
  • Updated the Firebase token registration handling (untested)
  • Made SecureStorage keys constant
  • Updated some function types
  • Renamed “API Key” to “data” in the share to server switch as now it shares the access token
  • Updated libs and raised target SDK from 36 (Android 16) to 37 (Android 17)

Current code can not be currently built as most screens have missing types after the API endpoints rewrite
also idk what to put as pic since it’s all code changes and can’t build the app so i’ll put the OAuth2 handling with the net.openid:appauth library

0
0
7
Open comments for this post

2h 35m logged

  • Added updated checking
    • For F-Droid flavor it doesn’t do anything
    • For APK flavor it checks my git repo
    • For Play Store flavor it uses play store com.google.android.play:app-update library
  • Updated the app site, available at https://ptero.stefdp.com
  • Updated the changelog & app images in the fastlane folder
  • Added an animation when switching between loading states with circular loading
0
0
10
Open comments for this post

3h 14m 42s logged

  • Created nests, nest & nest egg screens
    For nest egg screen, created 3 tabs:
  1. Configuration
  2. Variables
  3. Install Script
    it was pretty easy and quick to create those cuz they’re read-only as there’s no API endpoint to edit/delete them
  • Added a back handler in the tabbed screens so that back button now goes to the previous tab instead of the entire previous screen
  • In the client servers screen added a switch to see others’ server (admin only)
  • Fixed capitalization in the getNestEgg function (eggid -> eggId)
0
0
19
Open comments for this post

2h 58m 51s logged

  • Created users & user screen
  • Updated the AGP (Android Gradle Plugin)
  • Table headers now properly support multi line text (previously if one text was multiline while everything else wasn’t, all the divider would have a gap on the bottom except for the multiline one)
  • In the client server screen, settings tab the UUID is now aligned to the right
  • Improved screen change when deleting a server/node/user/location (instead of navController.popBackStack() (which basically acts as the back button) i specifically navigate to generic screen (eg. “user” -> “users”) and remove current screen from the back history so in the case that there is no screen to back into (eg if the app is opened via a deep link or stuff like that) it will go to the generic tab anyway)
  • Added pull to refresh in the location screen
0
0
67
Open comments for this post

1h 58m 31s logged

  • Created server manage tab (only reinstall & suspend/unsuspend cuz there seem to be no API endpoint to toggle install status & transfer)
  • Created server delete tab
  • Added 2 new button types, SUCCESS (green) and WARNING (yellow)
  • In the admin server screen now most tabs are hidden whent he server is installing
0
0
14
Open comments for this post

1h 19m 14s logged

  • Created the admin server databases tab (it only supports resetting the password and deleting the databases because for creating a database i need the hosts IDs, which there seem to be no API endpoint to get them)
  • Added a modifier param to the Container component
  • In the client server screen added a param to directly switch to the databases tab (this is used when the user goes from the admin server screen to the client server screen)
  • Fixed “Missing Server ID” notification when client server is opened with databases tab as first tab
0
0
5
Open comments for this post

1h 54m 52s logged

  • Created the server startup tab
  • Changed the way Container components are spaced in the Build Configuration tab and create server popup
  • In the create server popup disabled the docker image select when only 1 image is available
0
0
3
Open comments for this post

4h 29m 56s logged

  • Created server screen with its:
  1. About tab
  2. Details tab
  3. Build Configuration tab
  • Fixed pull to reload, it was updating the refreshIndex variable before the main resource actually refreshed and this caused the tabs not to refresh unless the user pulled to refresh twice
  • CodeText component now uses default text style & font weight instead of pre-defined ones (for some reasons with pre-defined ones, in the ScrollableTabRow component it adds like a margin on the bottom of the blue active indicator)
  • Updated UpdateServerDetailsBody to mark required fields as non-nullable
  • In the server owner select, fixed the selected user disappearing if it was not in the search results
  • In the allocation selects:
  1. Made the UI use alias:port when an alias is available, otherwise will default to ip:port
  2. Moved the ip:port text to a variable to avoid writing the same thing twice
0
0
3
Open comments for this post

1h 3m 45s logged

  • All *Include enums are now chainable so doing ListNodesQueryInclude.SERVERS + ListServersQueryInclude.USER returns servers.user
    Also now instead of <enum>.toQueryString(...) (like ListServersQueryInclude.toQueryString(...)) i do listOf(...).toQueryString()
  • Used the new include enum chaining in 2 places:
  1. node servers tab: it now makes way less HTTP requests since the user, nest & egg are directly returned with the server, saving me from making multiple HTTP requests to fetch all users, nests & eggs (which would’ve taken a long time on a large server that for example has thousands of users, since it was fetching at a rate of 50 users per HTTP request, and it being a mobile app, internet might not be fast too)
  2. servers screen, now it fetches the egg variable together with the nest instead of having to fetch the egg’s data
  • Moved ApiErrorResponse in a models folder for better organization

this is a code only change so ig i’ll show pics of the code

0
0
6
Loading more…

Followers

Loading…