Skip to content

pandaroux007/RepulsBot

RepulsBot

💬 The official bot for the repuls.io discord server

Join the repuls.io discord! GitHub Contributor Covenant

Built with Python3 GitHub Release Commits Stars

✨ About

What's repuls.io ?

Repuls.io is the future of browser games. The best free instantly accessible multiplayer first-person shooter for your browser with no sign-up or payment required!

Tired of the same run, aim, shoot gameplay that every shooter does ?! Played one, you played them all! Repuls has you riding bikes, grappling cliffs, piloting mechs and firing miniguns and plasma rifles and stomping vehicles with a giant mech! That's the repuls experience son!

And what about RepulsBot

  • Author : pandaroux007
  • License : the bot and everything that composes it (icon, code, etc.) are under the MIT license (see LICENSE.txt file). By contributing (whether it be code, graphics, links, or anything else), you agree to publish it under the same license.
  • GitHub created at : May 10, 2025, 4:49:10 PM
  • Added to the main server at : 19 Jul 2025
RepulsBot contributors

RepulsBot credits

Main contributors

Question/answer creators for the FAQ

  • snipertoad
  • BratzelBrezel
  • Abyss
  • eagoose
  • AlfaStephano48

Other contributors

NaN server

discord.py server


⚙️ Development

Note

You can find details on how the bot and the game work in the official fandom wiki, this section is only for developers and maintainers of the bot. Your contributions are welcome, be sure to read CONTRIBUTING.md first!

Development in progress

Log additions and improvements
Improve deleted message logs

Message deletion logs currently rely on on_message_delete, which uses the cache of discord.py (and isn't called for message deletions older than the bot's startup time, for example). This isn't really a problem, but it could be improved with on_raw_message_delete (with the drawback of often having much less information available).

Why hasn't this been done already?

For two reasons: firstly, there is less information available with the "raw" version of the event, and secondly, I don't know if it's really useful to log the deletion of very old messages. A discussion with the admins is necessary.

[STANDBY] Game chat monitoring
Goals

The game chat already has a filtering system and anti-spam (which would need to be tested to determine its limitations and triggers). The goal was to have, in addition to statistics, a way to detect and report player issues to the Discord admins. AmanLovesCats implemented a version of this "passive" filtering that used AI (Grok) for filtering. For data protection reasons (to comply with DocskiGames' privacy policy), especially regarding minors, we cannot use it in production, and it would be overkill (and very resource-intensive).

Solutions

The planned workflow is as follows:

  • Use the aiohttp websocket support (a dependency of discord.py) to retrieve the chat message stream in real time (worked with an additional dependency, websockets, partially works on aiohttp and asyncio.Future, this needs to be completed).
  • Implement additional filtering beyond the game's filter (based on google-profanity-words and some regular expressions for replaced characters, such as "@" → "a", etc.). Since the game already uses a list, we can add unprocessed words, special cases to define, or add a system similar to the AI ​​(e.g. VaderSentiment or similar), or even a small open-source and offline model (will have to wait for the VPS).
Reason for the standby

I prefer not to develop something unnecessarily, without a real need. Therefore, a discussion with the admins and the developer is necessary. The fact that the live chat can be retrieved doesn't mean it's useful to do so at this time.

[STANDBY] Translation context menu
Goals

I want to replace the RCA Bot translation functionality (which uses an unofficial Google Translate API via google-translate-api (Node.js), making it neither sustainable nor legal) with a more reliable, legal, privacy-respecting, and bandwidth-efficient method. For this reason, I won't use py-googletrans (even though it's more comprehensive and well-maintained), as it's also based on an unofficial API, which would amount to the same thing. Likewise, for reasons of privacy, keys/accounts, length/bandwidth limitations, and pollution due to requests, I will not use any of the many existing services (Google Translate, Lingvanex, DeepL, etc.)

Solutions

I am considering using an offline translation tool, for example LibreTranslate - based on the Argos engine, which can be used in combination with langdetect to download the necessary language models if needed.

Limitations (reason for the standby)

Unlike the API, which remains the easy solution, there is no limit to length or throughput (it's free and without any requests), but it remains more complex to set up, especially remotely (may require a Docker to contain memory leaks (community.libretranslate.com, LibreTranslate/LibreTranslate#545), fundamentally more resource-intensive than a simple API call (it remains to be seen to what extent and if we really gain from an energy point of view), so I'm waiting for a VPS to tackle it).

Others
  • Command to search for clan information (creation date, members, etc.).

Why hasn't this been done already? Currently, the game uses PlayFab Groups to store clans. However, the system is broken, and it's uncertain whether it will still rely on groups in the future. Furthermore, while it's possible to search for a clan by name and obtain its ID (GetGroup), access to its members (ListGroupMembers) is restricted by default and requires permissions (which the developer would need to grant to the bot or create a dedicated CloudScript). I prefer to wait for the game's backend to be fixed and stabilized.

  • Leaderboard retrieval (creation of a paginated browser for the general leaderboard with its categories/filters, and a search version per player)
    • This will allow the creation of an elegant version of the daily statistics (ccu, best players and best clans).

Why hasn't this been done already? Because RCA Bot already does this (AmanLovesCats manually corrects the display based on errors in the game's backend), and I don't have time to waste recoding the wheel. I prefer to wait for a corrected version of the API to develop a better interface afterward (at least then I won't have to manually fix it or track its changes).

  • A command connected to the game directory (GetCatalogItems if nothing has changed in the meantime) to browse the catalog from Discord (compare prices, preview skins, see weapon/charm stats, etc.)

Why hasn't this been done already? For now, I don't know how to create the preview dynamically without downloading part of the game bundle (which is heavy and overkill), nor how to retrieve weapon stats dynamically (the only easily accessible information is the display name, internal ID, and RC price).

  • Caracal reward system
  • Permanently remove API calls for Make It A Quote, and switch to a more bandwidth-efficient manual creation with Pillow.
  • Replacing text-based commands with a complete admin panel including parameter descriptions for antiraid (involves a custom modal with a type checking callback, and buttons to toggle booleans)
  • Integrate in-game moderation tools into a dedicated interface from Discord
  • Some features of RCA Bot (Sierra AI, leveling system) can be switched to this bot if the other ceases to be functional/maintained (which I don't think will be the case, and besides, I won't recode the "goofy stats" or the RNG).

Useful tools for contributing

Useful resources

About

The official bot for the repuls.io discord server

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages