ArtScuffle

2023-07-07
#Python#TypeScript#PostgreSQL

Unleash your creativity and battle your friends in this art trading game Discord bot.

I originally built ArtScuffle to host a private Artfight game among a small group of friends. While the majority of the mechanics are similar to the Artfight event, we wanted a more decentralized game that could run year-long so those with prior engagements in July could still participate when they had the time.

Since its creation, due to interest from the general public, I refactored the code to be more flexible and added a subscription service to cover image hosting costs for a larger audience. I also created an official site for the project to host information about the bot and guides on how to use it. The official site also has an admin dashboard for moderating submitted content.

The main command, which allows users to "attack" each other

Tech Stack

ArtScuffle is written in discord.py and uses PostgreSQL for database management. The website is written with Next.JS. Images are hosted on Backblaze.

Commands and Features

The main command is /attack, which users can use to submit an art piece for another user. The bot will then present the user with a series of questions in the form of dropdown menus. The user's answers to these questions factor into the point value of the art piece (pieces that take more effort and time will garner more points). The bot will then post the artwork (along with any message the user wrote) and tag both the attacker and attackee.

After and attack is posted, the attacker can use /addcharacter to add links to the character they drew. These links allow others to know what character is featured in the piece. If the attackee had previously attacked the attacker, the attack can also be "chained" to the previous attack using /chain. If two users attack each other back and forth, they can achieve higher chain levels.

Other commands include /profile to display a user's stats, /top to generate a leaderboard for a server or global ranking, and /attacks and /hits to view attacks done and received by a user.

Profile, leaderboard, and attacks/hits commands

To keep image hosting costs down, there are limits placed on the total number of attacks a server can have. /reset can be used to purge all attacks done by a server, clearing out storage space on the image server. /deleteattack can be used to remove individual attacks in the case of a misupload. The command also has an admin override which allows server admins to delete unsavory attacks.

The most updated feature/command list can be found on the site and updates to the bot can be found at the changelog.

Reception

After advertising the bot on Twitter, I received an incredible amount of support from the art community. I quickly hit Discord's 100 server limit for unverified bots and the bot was temporarily suspended for "spam". However, after a month of filing support tickets and back and forth with the support team, I was able to publicly release the bot again.

The most updated stats are published on artscuffle.xyz

ArtScuffle also has a dedicated Discord community in the form of an active support server where people can ask questions or participate in the server-specific ArtScuffle event.

Read About My Journey

I have also written several blog posts about my development journey over on my dev blog.

Part 1

Creating the Discord bot and implementing core functionality.

Part 2

Continued development of core functionality and growing the bot's abilities.

Part 3

Preparing for public release (and the actual public release).