GithubHelp home page GithubHelp logo

esamarathon / oengusio Goto Github PK

View Code? Open in Web Editor NEW
21.0 7.0 4.0 1.39 MB

Speedrun event submission and schedule manager

Home Page: https://oengus.io

License: GNU Affero General Public License v3.0

Java 96.98% Dockerfile 0.08% Shell 0.03% HTML 2.91%
java oengus hacktoberfest marathon scheduler speedrun speedrunning submissions

oengusio's Introduction

Oengus translateBadge

Oengus is a web application that helps manage speedrun marathons

https://oengus.io

Note that the front-end lives on this repository https://github.com/esamarathon/oengus-webapp.

How to run on your computer

Disclaimer: self-hosted instances are not allowed to use the Oengus branding.

Requirements

  • Java JDK 17
  • PostgreSQL 10+

Instructions

Setup

A docker image is hosted on docker hub https://hub.docker.com/repository/docker/oengusio/backend

On PostgreSQL, create a database named oengus

Fill the following fields and add them to your environment variables, this can be done locally with your favourite IDE but we strongly recommend Intellij IDEA. For Discord/Twitch, only one of them is required so you can login. We recommend using Discord since it's the easiest to setup.

The redirect urls for this are:

  • Login: [base_url]/login/discord
  • Sync: [base_url]/user/settings/sync/discord
AMQP_URI=amqp://localhost/;
AMQP_USERNAME=guest;
AMQP_PASSWORD= guest;
JWT_SECRET=<random string>;
PAYPAL_CLIENT_ID=; //Unrequired if you don't work on donations
PAYPAL_CLIENT_SECRET=; //Unrequired if you don't work on donations
DISCORD_CLIENT_ID=;
DISCORD_CLIENT_SECRET=;
DISCORD_BOT_TOKEN=;
TWITCH_CLIENT_ID=;
TWITCH_CLIENT_SECRET=;
TWITTER_CONSUMER_KEY=;
TWITTER_CONSUMER_SECRET=;
TWITTER_ACCESS_TOKEN=;
TWITTER_ACCESS_TOKEN_SECRET=;
twitter4j.debug=true;
twitter4j.oauth.consumerKey=;
twitter4j.oauth.consumerSecret=;
TWITTER_OAUTH2_CLIENT_ID=;
TWITTER_OAUTH2_CLIENT_SECRET=;
DB_URL=jdbc:postgresql://localhost:5432/oengus;
DB_USERNAME=;
DB_PASSWORD=;
BASE_URL=http://localhost:4200;
OAUTH_ORIGINS=http://localhost:4200,https://oengus.io;
SENTRY_DSN=;
SENTRY_TRACES_SAMPLE_RATE=1.0;
SENTRY_ENVIRONMENT=local;

Dependencies

./gradlew dependencies

Run

Docker (recommended for production)

Docker setup instructions are in docs/DOCKER.md.

  1. Copy docker-compose.yml to docker-compose.override.yml
  2. Fill in the environment variables in docker-compose.override.yml
  3. Run docker-compose up --build
IDE

Start OengusApplication.java with your favourite IDE. On first startup the database will be initialized automatically. See docs/DEVELOPER.md for detailed instructions on how to set up a development environment.

Support

Please join the official Discord server for questions and support

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate (if tests exist).

Translating

This project uses weblate for its translations, you can contribute by visiting https://hosted.weblate.org/projects/oengusio/exports

License

GNU AGPL v3.0

oengusio's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

oengusio's Issues

Submissions logs

Allow marathon moderators to have logs everytime a modification is made on submissions :

  • User creates a new submission
  • User modifies their submission
  • User deletes their submission

Logs should display a difference between new and previous submission

Source: https://gitlab.com/Gyoo1/oengusio/-/issues/7

Images in rich embeds

When the twitter-bot tweets out tweets it doesn't have images and it looks really bland

image

It would be much more impactful if events uploaded an event avatar, and this would be included in the rich embed meta data

Change api documentation to docs.oengus.io

I want to remove swagger from the backend to prevent it from calculating all the docs and routes at runtime. This can easily be done at compiletime with a file being generated as output.

UI for banning people

  • endpoint only accessible by admins
  • admin check in frontend
  • shrink down docker image for backend by using JRE instead of JDK
  • button will have confirm and is able to unban people as well

Console inputbox having 10 characters max

Is your feature request related to a problem? Please describe.
Console inputbox can only have 10 characters in them, which makes the full Playstation name unusable, and similar to the ZX Spectru(m). For the PS, it's not bad since people can simply fill in PS2, but for some consoles it's not enough,

Describe the solution you'd like
EITHER:

  • Maybe a 16 character limit
  • Have a dropdown list of all consoles currently submitters can choose from. This does give uniformity, and would help my statistics page to be a bit more uniform.

Paypal donation error in sandbox.

Describe the bug

When donating from sandbox with Paypal sandbox accounts, Oengus gives an error after the donation has supposedly been processed by Paypal, and doesn't appear in the tracker.
Unknown if this also affects production.
Donating from a US Paypal sandbox account on a sandbox marathon (the payee is also a sandbox account!)

How to reproduce

  1. Create a marathon on Oengus sandbox. When enabling donations, enter a Paypal sandbox email address for the payee.
  2. Start a donation from another Paypal sandbox account. It can be any amount.
  3. After the donation has been processed by Paypal, Oengus redicts you back to the donations page and gives a generic error. In the console, it's status code 500 (internal server error).

Expected behavior

The donation should go through normally and change donation total/incentive totals.

Desktop (please complete the following information)

  • OS: Windows 10
  • Browser: Chrome
  • Version: 89.0.4389.90

Smartphone (please complete the following information)

No response

Additional context/screenshots

No response

Chrome console error.
image

Proper error logging from oengus

Currently when an exception is thrown the server just returns a 500 error (even for validation errors)

I want to make something that catches these exceptions and returns a proper json response describing what went wrong

Volunteering manager

This issue will keep track of all things regarding this feature.
Feel free to leave ideas in the comments.

Automatic discord check when submitting

Have the marathon owner invite a discord bot that will check if a user is in the discord when submitting a run.

Tasklist (more will be added when required):

  • Create UI for discord requirement
    • Have user input discord invite (can fetch guild id from there)
  • Add database fields
  • Check if bot is in guild

Mail notifications system

Allow emails to be sent to users on multiple events
Events :

  • Send mails to runners when runs selection is done
  • Send mails to runners when marathon settings change
  • Send mail to moderators at the end of marathon (for feedback)

Misc :

  • Verify user email on signup
  • Provide default template for emails
  • Allow emails to be customized by marathon mods

Let user configure their notification settings

Source: https://gitlab.com/Gyoo1/oengusio/-/issues/9

multiple runs selection systems

Currently, a run can only get accepted.
A new vote feature will allow moderators to vote for runs that they want in the marathon.

Systems that I have in mind are:

  • direct pic: the current system will instantly accept it.
  • Vote: allows moderators to vote on a run. Voted runs will be ordered from most votes to least on the submissions page and can then be accepted by the person that created the marathon.

DB:
many to many relationships from users to runs, I will probably name the table user_run_vote

Remove Javers library

It creates a ton of logs on the database and can easily be removed

Todo list

  • remove Javers
  • add delete table entry for logging

Extra data points in user profile

Currently SpeedControl (used by ESA, UKSG, BSG, and many more) imports user meta-data from Speedrun.com during a schedule import. This is heavily rate-limited and speedrun.com of course has... reliability issues. It's SLOW to do an import because of meta data.

Adding these two data points would allow us to migrate that portion of SpeedControl import to oengus.

  • Pronouns

Pronouns.page has an API which can be used to pull in pronouns in four languages which is pretty cool, and we could direct people who want to contribute more languages to their project. https://en.pronouns.page/api

  • National flags

We use these on ESA overlays extensively and they form a big part of the unifying identity of European events.

Incentives do not show up when donating.

Describe the bug

On the donation page, there is no option to select any incentives, even when there are active incentives.
This affects sandbox and dev, production is untested as there are no active marathons that have donations enabled ;(

How to reproduce

  1. Create a marathon with incentives and donations active.
  2. Go to the donate page, and enter an amount.
  3. Scroll down to see that there is no option to pick incentives. No console error.

Expected behavior

I should be able to pick what incentives my donation should go towards. No more sniping incentives!

Desktop (please complete the following information)

  • OS: Windows 10
  • Browser: Chrome
  • Version: 89.0.4389.90

Smartphone (please complete the following information)

No response

Additional context/screenshots

Since you're here, how about a feature request? Move the incentives box above the donation button, so it's more obvious to donors that there are incentives to choose from. I find that if incentives are below the donation button less people will add incentives to their donation.

image

Tiltify Support

What is the feature?

Tiltify support to allow Tiltify charities and incentives to meet as one

Describe the feature

At the moment, incentive tracking must be done manually and donators must include in the donation message about an incentive on Oengus for us to keep track of it. Being able to select incentives when donating on tiltify would be amazing for I'm sure many. It would require communication with the Tiltify developers to get it working, though.

Additional context

No response

Alphabetise runnersavailabilities in schedule management

Is your feature request related to a problem? Please describe.
It's much easier to find certain people when their names are alphabetized in the list, instead of seemingly random.

Describe the solution you'd like
An alphabetised list.

Greetings from CptGMV

Translation license AGPLv3 "only" instead of "or-later"

Looking at https://hosted.weblate.org/accounts/profile/#licenses all the Oengus components are for some reason licensed "only", instead of "or-later". Is this an error?
https://hosted.weblate.org/projects/oengusio/#information

I am https://hosted.weblate.org/user/kingu/ on there, and I can't request nb_NO (Norwegian Bokmål) since I don't use Discord.
(Edit: Worked now, I think I added a glossary and the language consistency plugin did the rest.)

Site does not scale when zooming in/out.

Describe the bug
When zooming in with your browser, the site doesn't scale and text/buttons are no longer visible.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the site.
  2. Zoom in.

Expected behavior
All text/items will get zoomed in, without buttons being cut off.

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser Chrome
  • Version 88

Setup blocks don't work with horaro import

Describe the bug
Whenever I download the CSV for my marathon, and upload it to horaro, horaro errors out because the estimate is 0 minutes, with the setup buffer being as long as it's set here. Can the "input" be that duration, and setup block 0 minutes?

To Reproduce
Steps to reproduce the behavior:

  1. have schedule with empty field/setup buffer
  2. export csv
  3. upload to horaro

Expected behavior
Horaro to pass OpieOP

Duplicating availability over midnight skips a day

Describe the bug
On your availability screen, there's an action to duplicate your availability to the next day. Personally, my availability would be 10 AM to 2 AM the next day, so 16 hrs. But, I think, because it's a multi day, it skips the next day and does the day after.

To Reproduce
Steps to reproduce the behavior:

  1. Fill in an availability that spans over midnight.
  2. Duplicate

Expected behavior
I expect that 24 hours gets added to all the fields, instead of 48. Maybe they look at the "To" date, add a day, and use the timestamp from the "From" field.

Screenshots
https://i.imgur.com/gotHg73.png
In this screenshot, you can see I copied the 2nd field to the third, and that it skips a day.

Desktop (please complete the following information):

  • OS: Win10
  • Browser Chrome
  • Version 88, most recent?

Add event goal and donation milestones to tracker.

What is the feature?

Like the title suggests, add a configurable event goal and donation milestones to the tracker.

Describe the feature

The event goal is just the amount of money the organizers want to raise for their charity. Make this editable during the marathon so the organizers can raise this goal if the original goal ends up getting met.
The donation milestones act like a different type of incentive, for example if the event raises $100, a run will be added to the schedule. The key is that a donator can also select another incentive to support, as the donation milestone only keeps track of total donations.
Additionally, make these two items available from the API so it can be used in layouts.
These features are used in Tiltify, so if you're not sure how they work check them out on Tiltify.

Additional context

No response

Submission drafts

Problem
I've recently had the issue that a rescheduling of a marathon meant that I had to change my availabilities and because of the way the system is set up (you need to put availabilities in before you submit runs), I had to delete my submissions to re-set my availabilities and after that resubmit my run. And while copy/pasting all the info is not that big of a deal, I'd like to simplify it even further for people who submit the same games to multiple marathons.

Solution
Submission drafts - On your profile you create a draft for a submission that looks the same as the game submission form is for marathons and save it. Then when you're submitting runs to marathons you have an option to go into the drafts, possibly with either a dropdown menu or a small popup menu where they'd be sorted by game name and then within that by category.

Possible Alternatives
Submission history aka Oengus saving your submissions in a history-like section where you could copy everything from.

Schedule management rework

Backend:

  • Allow for plain runner names if no Oengus user is found
    Json for the fake user could be:
 {
     "username": "name", // Not null when it's an oengus user
     "display_name": "name",
     "oengus_user": true // indicate to the front-end to make it a link? (could just check for username being set)
 }
  • Remove dependency on category id
  • Remove some useless columns in schedule management to make it less cluttered

Frontend:

  • Put availability chart in an external window
  • Add filters to availability chart : runners available at beginning/end/current time
  • Add/remove displayed columns on schedule (also custom columns)
  • Allow markdown on game field

Source: https://gitlab.com/Gyoo1/oengusio/-/issues/3

Add Donation Incentive to Game Submission categories

What is the feature?

Add / move the Donation Incentive field to the Game categories within the submissions.

Describe the feature

We would love to see donation incentives to be added as an optional field to game categories.

Reasoning behind the optional field at a game category would be that incentives can be specific to a certain category and to make it clear which incentives belong where (unlike the current field which can, in a worst case, span over like 15 different cases). If the game has no incentives, the field can be left empty.

So adding another category would create a new field to be filled.

As an example; I could submit Link: The Faces of Evil with 3 categories; Any%, 100%, All Cutscenes. Any% could get a donation incentive to upgrade to 100%. 100% can be left empty. All Cutscenes could get the incentive to pick the language of the game (since it's only relevant there). While in the current case, it would be in 1 form and not sorted.

Additional context

This is a request we've had within BSG since starting testing with Oengus and would help a lot with clearing up the potential donation incentives per run.

404 page

Just is better than a redirect imo

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.