A Discord bot for osu!

Overview

osu profile

This is the mostly-complete repo for the owo Discord osu! bot which you can invite here. As you look through this repo, please keep in mind that all of this code is written for me and not for anyone else, so the only consideration for code structure is that it's convenient and works for me. Here's a quick FAQ section for you programmers or anyone who's considering trying to get this to work on your end. For a full list of commands, visit the website here.

Overview of Features

Firstly, if you're annoyed by the implicitly triggered "owo"-type commands, I'm with you - do >funadmin prefixless to disable them.

Secondly, if you haven't already, link your osu! account by doing >osuset user "your username"; if you have a space in your name, use quotes. The official server can provide verification for your account if you have your discord information on your osu! profile (settings section). If you wish to link your account to a private server, append the suffix -(server name) e.g. (>osuset user "your username" -ripple); things like rx are not needed in the server name when setting user. Do >botinfo to view supported private servers.

Table of Contents

Profile Commands

Firstly, to view some basic profile information, there are four commands: >osu >taiko >ctb >mania. If no parameters are provided, they will display the information of the account you linked, otherwise, it will use your input as a username and find that user's info. Examples: >osu Stevy, >taiko syaron105, >ctb AutoLs, >mania Jakads.

osu profile taiko profile ctb profile mania profile

If you append -d to any one of those, you will get a detailed profile. If you append -s, you will get some calculated statistics for the user using their top plays. Examples: >osu -d "Stevy", >osu -s "chocomint".

detailed profile stats profile

Return to Table of Contents

Top Play Commands

Next, there are the top commands: >osutop >taikotop >ctbtop >maniatop. Input convention follows the "core" commands from above. This will display your top 5 plays for that gamemode. Example: >osutop "chocomint".

osutop

The top command supports various types of sorting and filtering functions. By appending tags, you can sort by accuracy (-acc), max combo (-c), rank achieved (-rk), and score (-sc). You can filter by using tags like index (-i #) and mod (-m (mods)). Additionally, there is a no-choke option (-nc) that will calculate hypothetical no-choke plays for your entire top 100 - sorting and filters can be applied here as well. There is also a supporter feature (-im) that allows you to generate a score image of one of your plays. If you'd like to support, do >support or visit the patreon page. Examples: >osutop chocomint -nc, >osutop chocomint -im -i 3

no choke score image

For more information, use the >help command on the respective top command (e.g. >help osutop) in Discord or visit the website for examples.

Return to Table of Contents

Map Recommendations

The bot can give recommendations for any mode based on a user's top 15 plays and mods in the respective mode (e.g. >recommend or >r). If you think a recommendation is too easy, use the -f or farm parameter; the higher the number, the more farmy. If you don't like the mods it gives, you can specify by just writing the mod afterwards, like HDDT. If you want a specific ar, use the -ar tag. You can also use ranges, like 4-5. However, it should be noted that for non-std recommendations, only the -pp and -f options work. For more information, visit the website. Example: >r -f 10 -ar 10-10.4 HDDT -pp 300-350 (Farm rating = 10 (easy to farm), AR = 10-10.4, mods = HDDT, target pp = 300-350).

rec image

Return to Table of Contents

Tracking

To track a user or users, type the command >track add (username) (username2) .... The default mode and number tracked is 0 (std) and 50. To specify the # of top plays to be notified about, append -t # to the command. To specify the modes to be tracked, append -m (modes) to your command; 0=std, 1=taiko, 2=ctb, 3=mania. e.g. >track add -m 23 -t 75 Stevy would track the top 75 plays for Stevy on that channel for modes 2 and 3. You can also track certain countries and the number of players by appending -c and a two-character country code or global, and specify the number of top players using -p #. The number of top plays and the modes are, again, defined by -t and -m, respectively. Please keep in mind that servers have a default track limit of 200 players, but tracking a country's top 30 players for 3 different gamemodes will only add 30 to your list! If you made a mistake in adding a user, simply use the add command again.

If you want to completely overwrite with new options, use -o. If you want to remove that user or users from tracking, use >track remove (username) (username2) .... If you want to clear all people on the server, do >track remove -a. If you want to clear a single channel, do track remove -ch in that channel. For more info, use >help track add or visit the website.

Return to Table of Contents

Map Feed

The bot can track newly qualified, ranked, and loved maps for all gamemodes. To enable, pick a channel and do >mapfeed. By default, the bot will display all new maps that are either qualified, ranked, or loved and in all gamemodes. To filter what maps gets displayed, you can introduce filters such as excluded mappers (-xmpr) or least stars (-ls) to only get beatmap sets containing at least one map with a star value greater than what was specified. To view your settings, do >mapfeed -info. To remove a channel from the map feed, do >mapfeed -rm. For more information, visit the website. An example of a newly ranked map is shown below.

map feed image

Return to Table of Contents

Implicit Commands

There are a few passive triggers for owo, mostly to do with osu links and screenshots. There is a 5 second cooldown per server when any of these are triggered. The way to disable all of these server-wide is >osuadmin implicit. To toggle, do the command again. Below are ways to selectively enable/disable different links.

Beatmap Links

If a beatmap linked from the official site is posted, owo will post that map's information, pp information, along with some download links. If it is a single beatmap, a graph (only accurate for std) will be displayed. If it's a beatmap set, the top 3 difficulties will be displayed. If you wanted to see how certain mods will effect the map's pp values, you can simply append +(mods) to the end of the link. This is very similar to the >map command. Examples: https://osu.ppy.sh/beatmapsets/93523#osu/252238, https://osu.ppy.sh/beatmapsets/93523#osu/252238 +HDHR

beatmap image beatmap_mod image

Return to Table of Contents

User Links

The bot also detects user links and displays them in the same format as the basic profile commands. Example: https://osu.ppy.sh/users/5053158.

user link image

Screenshots

The bot is able to detect maps from screenshots (to varying degrees of accuracy...). If a top or recent play is detected, then it will provide some information of that play, otherwise, it will only be the map information. The screenshot must be from the official server or directly from the game (no modified filenames). Normally, screenshot files should follow the format screenshot#.png.

screenshot image

Toggling Implicit/Passive Settings

To toggle settings for link and screenshot detection, use the >osuadmin command and sub-commands. Toggling the implicit setting will enable/disable all link/screenshot detection (e.g. >osuadmin implicit). Sub-commands like beatmapurl will disable beatmap url detection. Other options are listed in the osuadmin stem command. To get an overview of your settings (not just for osu!), do >overview. Example: >overview.

overview image

Getting More Info w/ >help

As mentioned previously, if you want to explore more stuff about the bot, use the >help or >h command. If you are dealing with a nested command, you can do something like >h track add. You can also visit the website which includes many examples. Example: >h track add.

help image

Return to Table of Contents

Coding FAQ

Why are cogs mostly in a huge file and not separated?

Writing in a single file is extremely convenient for me to apply hotfixes and reload the module. Hotfixing and reloading are far-preferred over restarting because the bot takes about 15 minutes to log in all shards due to Discord API rate limit restrictions. After fiddling around with importlib for several days, I haven't been successful in reloading files that aren't the one the cog is located in. If you have gotten this to work in Python/discord.py, then I'd love to know about it.

What is with all this spaghetti code?

Like you, my intensions aren't to write code that is unreadable. But when things get as complex as they do with new feature requests coming in every week, you just give into the mess while trying to implement things as fast as possible. So as I said up top, this code is for no one and is not meant to be read. To me, if it works, it works.

Why are there so many unspecified try-catches?

At some point, you just get tired of seeing errors in your console from bad user inputs. Doing this is akin to this meme.

Will you ever upload the databases you use?

No, there is too much back-end going on and helping everyone get the database working will be a hassle.

I have osu API questions, can you help?

Yeah, of course! I'm open to any questions if people need help with the osu! API or programming questions in general. Although, after reading this code, I'm not so sure you'd want it! But if you still do, feel free to chat in the Discord server.

Return to Table of Contents

Owner
Stevy
I'm a Stevy person.
Stevy
A GitHub Follower Bot that is a WIP.

GitHub Follower Bot (WIP) Work In Progress This bot is a WIP. There are still many features I plan to add and code I need to improve (I'm still fairly

Christian Deacon 71 Dec 29, 2022
discord vc exploit to lightly lag vcs

discord-vc-reconnector discord vc exploit to lag vcs how to use open the py file, then open devtools on discord, go to network and join a vc, dont sta

Tesco 30 Aug 09, 2022
A fun hangman style game to guess random movie names with a short summary about the movie.

hang-movie-man Hangman but for movies ๐Ÿ˜‰ This is a fun hangman style game to guess random movie names from the local database and show some summary ab

Ankit Josh 10 Sep 07, 2022
Wrapper for Between - ๋น„ํŠธ์œˆ์„ ์œ„ํ•œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

PyBetween Wrapper for Between - ๋น„ํŠธ์œˆ์„ ์œ„ํ•œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Legal Disclaimer ์˜ค์ง ๊ต์œก์  ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋น„ํŠธ์œˆ์€ VCNC์˜ ์ž์‚ฐ์ž…๋‹ˆ๋‹ค. ์•…์˜์  ๊ณต๊ฒฉ์— ์ด์šฉํ• ์‹œ ์ฒ˜๋ฒŒ ๋ฐ›์„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž๊ฐ€

1 Mar 15, 2022
Lib for create and show QRCode to PIX, you can show this code in another applications for payment by final consumer.

Biblioteca para a geraรงรฃo de codigos QR (BRCode como chamados na documentaรงรฃo do BACEN) a fins de facilitar a exibiรงรฃo para pagamentos ao consumidor.

Joรฃo Camargo 13 Oct 05, 2022
๐Ÿฅ€ Find the start of the token !

Discord Token Finder Find half of your target's token with just their ID. Install ๐Ÿ”ง pip install -r requeriments.txt Gui Usage ๐Ÿ’ป Go to Discord Setti

zeytroxxx 2 Dec 22, 2021
Singer Tap for dbt Artifacts built with the Meltano SDK

tap-dbt-artifacts tap-dbt-artifacts is a Singer tap for dbtArtifacts. Built with the Meltano SDK for Singer Taps.

Prratek Ramchandani 9 Nov 25, 2022
Slack Developer Kit for Python

Python Slack SDK The Slack platform offers several APIs to build apps. Each Slack API delivers part of the capabilities from the platform, so that you

SlackAPI 3.5k Jan 02, 2023
A telegram bot which can show you the status of telegram bot

BotStatus-Ts-Bot An open source telegram Bot Status bot For demo you can check here The status is updated in every 1 hour About Bot This is a Bot stat

Ts_Bots 8 Nov 17, 2022
Social Framework

Social Int Framework Social Int Framework its a Selenium script that scrape the IG photos and do a Reverse search on google and yandex for finding ano

29 Dec 06, 2022
Python interface to the World Bank Indicators and Climate APIs

wbpy A Python interface to the World Bank Indicators and Climate APIs. Readthedocs Github source World Bank API docs The Indicators API lets you acces

Matt Duck 47 Oct 31, 2022
A Telegram bot to all media and documents files to web link .

FileStreamBot A Telegram bot to all media and documents files to web link . Report a Bug | Request Feature ๐Ÿ About This Bot : This bot will give you

Code X Mania 129 Jan 03, 2023
Crypto-trading-simulator - Cryptocurrency trading simulator using Python, Streamlit

Crypto Trading Simulator Run streamlit run main.py Dependency Python 3 streamli

Brad 12 Jul 02, 2022
โ€œ Hey there ๐Ÿ‘‹ I'm Sophia โ€ž TG Group management bot with Some Extra features..

โค๏ธ Sophia โค๏ธ Avaiilable on Telegram as SophiaBot ๐Ÿƒโ€โ™‚๏ธ Easy Deploy Mandatory Vars [+] Make Sure You Add All These Mandatory Vars. [-] APP_ID: You ca

THEEKSHANA 5 Dec 09, 2021
trading strategy for freqtrade crypto bot it base on CDC-ActionZone

ft-action-zone trading strategy for freqtrade crypto bot it base on CDC-ActionZone Indicator by piriya33 Clone The Repository if you just clone this r

Miwtoo 17 Aug 13, 2022
A Python wrapper for the Dogehouse API.

Python wrapper for the dogehouse API Installation pip install dogehouse Example from dogehouse import DogeClient, event, command from dogehouse.entiti

Arthur 36 Jun 15, 2022
A discord bot to check if messages have the correct code formatting.

discord-code-formatter A discord bot to check if messages have the correct code formatting. This was a basic project to help me learn Python and learn

Nash Boisvert 1 Nov 23, 2021
A Discord bot that generates inspirational quotes & motivating messages whenever a user is sad

Encourage bot is a discord bot that allows users to randomly get Inspirational quotes messages and gives motivational encouragements whenever someone says that he's sad/depressed.

1 Nov 25, 2021
Automation application was made by me using Google, Sheet and Slack APIs with Python.

README This application is used to transfer the data in the xlsx document we have to the Google Drive environment and calculate the "total budget" wit

3 Apr 12, 2022
๐Ÿ”ช Block replies to viral tweets from users getting paid to promote useless products

This Tweet Took Off Ublock Origin filter list targeting long reply chains posted by twitter users who get paid to promote random products on viral twe

Xetera 12 Jan 14, 2022