Faster Twitch Alerts is a highly customizable, lightning-fast alternative to Twitch's slow mobile notification system

Overview

Faster Twitch Alerts

maintenance status github last commit github issues github license

What is "Faster Twitch Alerts"?

Faster Twitch Alerts is a highly customizable, lightning-fast alternative to Twitch's slow mobile notification system. Faster Twitch Alerts currently supports two notification platforms: Discord and Pushover.

The program can notify you when:

  • A streamer goes live
  • A streamer goes offline
  • A streamer gets banned
  • A streamer is unbanned
  • A streamer updates their title and/or game

Disclaimer: This program is not associated in any way with Twitch, Discord, or Pushover


Getting Started

  1. Clone the repository
  2. Install the Python 3 and the Python requests library
  3. Set your notification preferences in the config.json File
  4. Run Main.py
    • If the program terminates unexpectedly, check the log file for more information
    • You can terminate the program at any time using 'ctrl+c'

Config Fields Explained

Primary Fields

For more detailed explanations of each field, follow the links

Field Name Required?
Twitch Settings Yes
Logger Settings Yes
Streamers Yes
Discord Settings No
Pushover Settings No

Twitch Settings

This is where we store overall program settings and settings related to the Twitch API

Example Twitch Settings Object:

"Twitch Settings" : {
	"Client ID" : "YOUR CLIENT ID",
	"Secret" : "YOUR SECRET",
	"Reconnect Attempts" : 10,
	"Reconnect Cooldown" : 60,
	"Refresh Rate" : 1
}

Twitch Settings Fields:

Field Name Description Required? Datatypes Alert-Specific Settings Special Formatting
Client ID Your Twitch developer application client ID 1 Yes str Not Allowed Not Allowed
Secret Your Twitch developer application client secret 1 Yes str Not Allowed Not Allowed
Reconnect Attempts The number of times the program will attempt to reconnect to the network during an outage 2 Yes int Not Allowed Not Allowed
Reconnect Cooldown The amount of time (in seconds) that the program will wait before trying to reconnect to the network after a connection failure Yes int, float Not Allowed Not Allowed
Refresh Rate3 The number of times per second to pull new data from the Twitch API Yes int, float Not Allowed Not Allowed

Footnotes:

  • 1 Setting Up a Twitch Developer Application
  • 2 Negative values signal infinite reconnect attempts
  • 3 There is a hard cap on the refresh rate imposed by Twitch API rate limits. You can calculate the refresh rate using the following formula: 20 / (3 * ceil( [# of streamers] / 100 ))

Logger Settings

Settings related to the log file

Example Logger Settings Object:

"Logger Settings" : {
	"Log Level" : "INFO",
	"Log Filepath" : "logs/twitch_alerts.log",
	"Message Text" : "ALERT!"
}

Logger Settings Fields:

Field Name Description Required? Datatypes Alert-Specific Settings Special Formatting
Log Level Allows users to define which messages they receive 1 Yes str Not Allowed Not Allowed
Log Filepath The path (relative to current working directory) of the log file Yes str Not Allowed Not Allowed
Message Text Text to display when an alert is triggered No 2 str Allowed Allowed

Footnotes:

  • 1 More Info on Log Levels:
    • DEBUG: Shows minor network errors
    • INFO: Info about streamer activity, and general program info
    • WARNING: Info about non-fatal errors
    • ERROR: Info about fatal errors
  • 2 A warning will be displayed if field is incomplete and log level is either DEBUG or INFO

Streamers

The JSON object containing settings for all of the streamers we wish to monitor

Example Streamers Object:

"Streamers" : {
	"streamer-username-1" : {
		"Ban Status" : false,
		"User ID" : "123456789"
	},
	"streamer-username-2" : {
		"Ban Status" : true,
		"User ID" : "987654321"
	}
}

Streamer Object Fields:

Field Name Description Required? Datatypes Alert-Specific Settings Special Formatting
Ban Status A Boolean flag used to signal if a streamer is banned 1 Yes bool Not Allowed Not Allowed
User ID A streamer's unique identification number (provided by Twitch) 1 Yes str Not Allowed Not Allowed
Discord Settings Streamer-Specific Discord Settings. For possible fields see Discord Settings 2 No dict N/A N/A
Pushover Settings Streamer-Specific Pushover Settings. For possible fields see Pushover Settings 2 No dict N/A N/A

Footnotes:

  • 1 A streamer's user ID can only be viewed using API calls, it is recommended that you use the set_config.py program in Utils/ to generate the "Streamers" field
  • 2 The "Soon Cooldown" field can only exist in global settings

Sidenote: Global vs. Streamer-Specific Settings

We refer to Discord/Pushover settings within the streamer object as "streamer-specific settings." These settings take precedence over "global settings" in either Discord Settings or Pushover settings. In this way, we can create global settings that will apply to all streamers, and also make fine-grain adjustments to individual streamers' settings.

Discord Settings

Global settings for Discord alerts

Example Discord Settings Object:

"Discord Settings" : {
	"Soon Cooldown" : 300,
	"Alerts" : "all",
	"Webhook URL" : "SOME WEBHOOK URL",
	"Bot Username" : "Faster Twitch Alerts",
	"Avatar URL" :   "Link to Avatar Image",
	"Discord ID" :   "Some Discord ID",
	"Message Text" : "DISCORD ALERT!"
}

Example Discord Settings Fields:

Field Name Description Required? Datatypes Alert-Specific Settings Special Formatting
Soon Cooldown Controls how often changes to an individual streamer's title or game will generate an alert by setting a cooldown period (units = seconds) Yes int, float Not Allowed Not Allowed
Alerts Controls what types of messages will generate an alert No str Allowed Not Allowed
Webhook URL The Webhook URL for the Discord channel which will receive the alert No1 str Allowed Allowed
Bot Username The display name of the bot that will be the sender of the alert No str Allowed Allowed
Avatar URL A direct link to an image that will be the Discord bot's avatar No str Allowed Allowed
Discord ID2 A Discord role/user ID that can be used to tag members of a Discord server. See below for examples No str Allowed Allowed
Message Text Text to display when an alert is triggered No1 str Allowed Allowed

Footnotes:

  • 1 These fields must be defined for all active alert types in either global settings or streamer-specific settings otherwise the program will terminate
  • 2 You can find user/role ID's by activating "Developer Mode" on Discord

Discord Message Tips:

Mentions:

<@discord_id>" Roles: "<@&discord_id>"">
Users: "<@discord_id>"
Roles: "<@&discord_id>"

Using a Custom Server Emoji:

<:emoji_alias:emoji_id>" Animated: " "">
Normal:    "<:emoji_alias:emoji_id>"
Animated: "
    
     "

    



Pushover Settings

Global settings for Pushover alerts

Example Pushover Settings Object:

"Pushover Settings" : {
	"Soon Cooldown" : 300,
	"Alerts" : "all",
	"API Token" : "YOUR API TOKEN",
	"Group Key" : "YOUR GROUP KEY",
	"Devices" : "Some Devices",
	"Priority" : 1,
	"Embed URL" : "https://www.twitch.tv/{name.lower()}",
	"URL Title" : "Go To Stream",
	"Sound" : "Some Sound",
	"Message Title" : "Faster Twitch Alerts",
	"Message Text" : {
		"live" : "{name} is Live Right Now! \ud83d\udce1",
		"title" : "{name} Might Be Going Live Soon! \u231b",
		"game" : "{name} Might Be Going Live Soon! \u231b",
		"offline" : "{name} Just Went Offline \ud83d\ude14",
		"ban" : "{name} Just Got Banned \u2696\ufe0f",
		"unban" : "{name} has Been Unbanned! \ud83c\udf89"
	}
}

Example Pushover Settings Fields:

Field Name Description Required? Datatypes Alert-Specific Settings Special Formatting
Soon Cooldown Controls how often changes to an individual streamer's title or game will generate an alert by setting a cooldown period (units = seconds) Yes int, float Not Allowed Not Allowed
Alerts Controls what types of messages will generate an alert No str Allowed Not Allowed
API Token1 Pushover API token No2 str Allowed Allowed
Group Key1 Pushover User or Group Key No2 str Allowed Allowed
Devices1 Comma-separated list of device names to send the alert to No str Allowed Allowed
Priority1 Integer from -2 to 2 that specifies how important the alert is No int Allowed Not Allowed
Embed URL1 Supplementary URL for the alert No str Allowed Allowed
URL Title1 The text to display for the "Embed URL" No str Allowed Allowed
Sound1 The name of the sound to play for the alert No str Allowed Allowed
Message Title1 The title of the alert No str Allowed Allowed
Message Text Text to display when an alert is triggered No2 str Allowed Allowed

Footnotes:



Alert-Specific Settings

For certain fields, we may want to change our preferences based on the type of alert being triggered. This is fairly easy to do, we can simply create a JSON object of alert-type keywords and specify different parameters for each keyword.

Alert-Specific Settings Example:

Without Alert-Specific Settings:

"Message Text" : "Some Alert Message"

With Alert-Specific Settings:

"Message Text" : {
	"live"    : "Some 'Live' Message",
	"offline" : "Some 'Offline' Message",
	"ban"     : "Some 'Ban' Message",
	"unban"   : "Some 'Unban' Message",
	"title"   : "Some 'Title Change' Message",
	"game"    : "Some 'Game Change' Message"
}

Alert Types

Faster Twitch Alerts can send alerts for many types of events. Below are the keywords describing each alert type

Alert Type Description
live The streamer went live
offline The streamer went offline
ban The streamer was banned
unban The streamer's ban ended
title The streamer updated their stream's title (while offline)
game The streamer switched categories (while offline)

Keyword Mapping

For the sake of efficiency, we've provided additional keywords that specify multiple alert fields. Below you can see the keywords and which alert types they map to.

Alert Type Description
all live, offline, ban, unban, title, game
none1
bans ban, unban
soon title, game

Footnotes:

Alerts Field

The Alerts field is used to toggle certain alert types on and off.

Valid "Alerts" Formats:

Boolean Keyword Dictionary:

"Alerts" : {
	"live"    : true
	"offline" : true,
	"ban"     : true,
	"unban"   : true,
	"title"   : true,
	"game"    : true
}

Comma-Separated Keywords in String Format:

"Alerts" : "live, offline, ban, unban, title, game"

Negation Operator:

'!' Can be used in front of a keyword to negate that keyword

Note that keywords are parsed in order, for example

  • "all, !live" -> Alerts for everything except "live"
  • "!live, all" -> Alerts for everything, even "live"


Special Formatting

Sometimes we want more customization beyond what a normal string can offer. For this reason we've created a special formatting system for certain fields.

Here's how it works:

Every statement in curly braces will be evaluated by the formatter. The formatter understands Python and expects a string to be returned by whatever is contained in the braces.

There are a few local variables we can use as well. These fields will change depending on the alert type and the streamer.

Variable Description
time Evaluates to time.localtime()
name The username of the streamer
title The streamer's current stream title
game The streamer's current game category
message The alert type of the message
discord_id The user-specified Discord ID for the message

Due to the way Python interprets strings, we may need alternate ways to specify escape characters. Below are the currently available alternatives

Variable Description
nl newline
tb tab
dq double quote
sq single quote

Examples:

Basic Example:

"Message Text" : {
	"ban" : "{name} Was Just Banned",
	"unban" : "{name} Was Just Unbanned",
	"live" : "{name} Just Went Live",
	"offline" : "{name} Just Went Offline",
	"title" : "{name} Changed Their Title to \"{title}\"",
	"game" : "{name} Changed Their Game to \"{game}\""
}

String Formatting Example:

"Bot Username" : "{name.capitalize()} - {message.capitalize()}"

If/Else Statement Example:

"Message Text" : {
	"bans" : "{name} Was Just {'Ban' if message=='ban' else 'Unban'}ned"
}

Owner
Epic gamer
Data Platform com AWS CDK

Welcome to your CDK Python project! This is a blank project for Python development with CDK. The cdk.json file tells the CDK Toolkit how to execute yo

Andre Sionek 8 Jul 02, 2022
A bot can be used to broadcast your messages ( Text & Media ) to the Subscribers

Broadcast Bot A Telegram bot to send messages and medias to the subscribers directly through bot. Authorized users of the bot can send messages (Texts

Shabin-k 8 Oct 21, 2022
Create a Neo4J graph of users and roles trust policies within an AWS Organization.

AWS_ORG_MAPPER This tool uses sso-oidc to authenticate to the AWS organization. Once authenticated the tool will attempt to enumerate all users and ro

Ruse 24 Jul 28, 2022
WhatsApp Status Tracker With Python

Warning!! This Repo is Purly educational purpose Don't use this to stalk on others, which is subjective to crime Pre-Req: Telegram bot of your own wit

Vignesh Karunagaran 10 Dec 09, 2022
A discord bot that moderates your server!

Staff Bot para Discord O que é? É um bot que modera o seu servidor no Discord, apagando mensagens indesejadas que os usuários mandem! Como usar Primei

Isac Gonçalves Cunha 3 Oct 07, 2021
This is a simple collection of instructions and scripts to accompany the computerphile video about mininet and openflow.

How to get going. This project should work on Linux or MacOS. I used Ubuntu 20.04 and provide some notes here. Note, this is certainly not intended as

Richard G. Clegg 70 Jan 02, 2023
AWS Lambda Fast API starter application

AWS Lambda Fast API Fast API starter application compatible with API Gateway and Lambda Function. How to deploy it? Terraform AWS Lambda API is a reus

OBytes 6 Apr 20, 2022
a translator bot for discord

TranslatorBOT it is a simple and powerful discord bot, it been used for translating includes more than 100 language, it has a lot of integrated comman

Mear. 2 Feb 03, 2022
Instagram GiftShop Scam Killer

Instagram GiftShop Scam Killer A basic tool for Windows which kills acess to any giftshop scam from Instagram. Protect your Instagram account from the

1 Mar 31, 2022
API kumpulan doa-doa sesuai al-qur'an dan as-sunnah

API kumpulan doa-doa sesuai al-qur'an dan as-sunnah

Miftah Afina 4 Nov 26, 2022
Telegram music & video bot direct play music

⚡ NOINOI MUSIC PLAYER 🎵 SUPERFAST MUSIC BOT WHO CAN DIRECT PLAY SONG ON TELEGRAM VOICE CHAT ALSO CAN PLAY VIDEO ON VOICE CHATS ✨ Heroku Deploy YOU CA

noinoi-X 1 Dec 28, 2021
A multi exploit instagram exploitation framework

Instagram Exploitation Framework About IEF Is an open source Instagram Exploitation Framework with various Exploits that could be used to mod your pro

Instagram Exploitation Framework - BirdSecurity 1 May 23, 2022
A telegram bot to forward messages automatically when they arrived.

Telegram Message Forwarder Bot A telegram bot, which can forward messages from channel, group or chat to another channel, group or chat automatically.

Adnan Ahmad 181 Jan 07, 2023
Weee - Advanced project's versions bumper

Weee - Advanced project's versions bumper

Yan Kurbatov 2 Jun 06, 2022
A modern, easy to use, feature-rich, and async ready API wrapper improved and revived from original discord.py.

A Python API wrapper that is improved and revived from the original discord.py

Orion 19 Nov 06, 2021
A simple and modular Discord bot with various functionalities.

All-In-Bot for Discord A simple and modular Discord bot with various functionalities. How to use the bot? Simple! Just invite the bot to your server u

Th3J0nny 3 Jan 29, 2022
Discord feeder for AIL

ail-feeder-discord Discord feeder for AIL Warning! Automating user accounts is technically against TOS, so use at your own risk! Discord API https://d

ail project 6 Mar 09, 2022
💻 A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline!

LocalStack - A fully functional local AWS cloud stack LocalStack provides an easy-to-use test/mocking framework for developing Cloud applications. Cur

LocalStack 45.3k Jan 02, 2023
User-Bot for reporting russian propaganda channels

Юзер-Бот, що автоматизує репортування Телеграм каналів пропагандистів Цей Телеграм Юзер-Бот використовується для автоматизації репорту пропагандистьск

58 Nov 07, 2022