Payphone is a big bot. It started as a small project I had made because I didn’t like Yggdrasil and their model, so I decided I’d build my own. Luckily, Ygg went down right after I launched Payphone, so I got a lot of users really fast.
It’s been a year since I released Payphone, and we now have 150k users and a few hundred thousands of messages (even millions, I estimate) a day, which is a lot to moderate. To give you an idea, we get up to ~500 reports a day (and growing) at the time of writing this, and we’re only two moderators: Stasi and I.
Reporting’s History
When I first launched Payphone, I didn’t have a reporting system. I launched with the bare minimum because I was already getting burnt out from working on it for months lazily, and I didn’t want to spend more time on it. I had barely no users for the first few weeks, so I didn’t really need it either.
After some time, I started getting more users, and this became a problem when I didn’t have any banning nor reporting system in place. I added the famous p.report
command, which allowed users to report whole conversations, and I’d have to read through the whole conversation to find who broke the rules and ban them. Think that some calls last hours and some are super spammy, so it was a crazy amount of work to do for the growing amount of reports I was getting. I got some people to help me out reading them all (this is when Stasi came in), but it was still way too much work even when we had around 10 people reading reports.
The first rewrite of Payphone didn’t change this system much—if at all—because the only change I made was that reports were no longer spammed in a #reports
channel, but instead displayed in a paged modal when you did p.reports
. It was still a lot of work, and it wasn’t sustainable.
The Current System
Finally, we moved to the current system, which is a lot more sustainable: reporting individual messages. It’s far from perfect:
- It only shows the message that was reported, not the context around it.
- The command is a message command, which means it’s hardly discoverable without help.
I had an idea to solve #1, which was to make the p.reports
modal more interactive.

I’ll keep writing when I get some free time.