HackRemind (currently in Beta) is a Discord bot that notifies about upcoming competitive programming and machine learning contests, hackathons, capture-the-flag challenges and other coding related events.
There are two ways to use the bot.
I don't want to mess things up 😐
Join our Discord Server and follow #upcoming-competitions to add the channel's notifications to your server.
After adding bot to your server, you may like to change its name or avatar. You can modify them by editing your channel (little cogwheel icon alongside channel name). Open Integrations > Channels Followed > CodeBase #upcoming-competitions to get the required settings.
I kinda like doing things my way!
Head over to developers' guide to learn more and deploy your version of the bot to⠀
Click to expand
- Advent of Code
- AtCoder
- AZsPCs
- Bubble Cup
- Reply Challenges
- CodeChef
- Codeforces
- Gym - Codeforces
- Codility
- CodinGame
- CTFtime
- Dare2Compete
- Devfolio
- Devpost
- DMOJ: Modern Online Judge
- E-Olymp
- HackerEarth
- HackerRank
- ICFP Programming Contest
- Kaggle
- LeetCode
- Kattis
- Project Euler
- Quora
- Russian AI Cup
- Sphere Online Judge (SPOJ)
- TLX
- Topcoder
Click to expand
This bot is an Azure Function App using Node.js as runtime. You can customize the following:
Variable | Description | Possible Values, Defaults and Format |
---|---|---|
NODE_ENV |
Tells if the app is running in production or not. Note that dotenv is listed as a development-only dependency and won't be available on production to extract variables from .env file, even if it is pushed, so you must set this to ensure that the app runs fine on server also. |
development (default) or production |
MONGO_URI |
Connection string of a MongoDB database. A database is required to record which events have already been pushed. You don't need to worry about the storage (512MB should be sufficient). The app will automatically remove old records. | Connection String URI Format (default: mongodb://localhost:27017/hackremind ) |
CLIST_BEARER |
CLIST (Bearer Token) Authorization Header | ApiKey clist-user:api-key |
BOT_TOKEN |
Discord Bot Token (Ref. Creating a discord bot & getting a token) | ... |
CHANNEL_ID |
Discord Channel ID (to which you wanna push notifications). If the specified channel is an announcement (news) channel then the bot will automatically publish all the notifications to followers. (Ref. Where can I find my User/ Server/ Message ID?) | ... |
ICONS_URL |
A location containing icons of all hosts. Icon URL of the host is generated by this code. | default |
ONE_PX_IMG |
URL containing a 1px transparent image of at least 432px (required to fix width of embeds). (Ref. Discord.js embed width is unreliable) | default |
CONCURRENCY |
The max number of tabs your environment can handle in a Puppeteer (Chromium) browser instance. High concurrency may result in failure (like socket hang up, EventEmitter memory leak) depending on free memory, processing power, network speed,.. | any decimal value between 1 to 5 (both inclusive, default 4 ) |
Locally, one can set/modify environment variables in numerous ways. Some of them are:
- Create a
.env
at root of the folder. Ref. - Set variables in the shell itself. Ref. 1,2,3
- Use
local.settings.json
. Ref. SO,docs
On server, you need to specify application settings. Apart from the
methods mentioned in that article, one can use this VSCode extension or
use --publish-local-settings
switch while publishing.
All the environment variables having a default value are optional.
Puppeteer works only on Linux consumption plan and when deployed using remote build.
You can modify this cron expression if you want to run the bot at different intervals. It currently runs every 2 hours.
The default timezone in an Azure Functions App is UTC. If you wanna run your
job in some other timezone you need to set WEBSITE_TIME_ZONE
.
If you're stuck on something we might be of some help. Feel free to create a new discussion.