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
A Telegram Bot with(Forwarder Bot + User Bot + More Features )

A Telegram Bot with(Forwarder Bot + User Bot + More Features )

Kaif 3 Feb 16, 2022
Python Client for MLflow Tracking Server

Python Client for MLflow Python client for MLflow REST API. Features: Unlike MLflow Tracking client all REST API methods are exposed to user. All clas

MTS 35 Dec 23, 2022
a simple quant trading bot with CLI interface

shepherd a simple quant trading bot with CLI interface CLI shell command docs coming soon after I brush up the code and add more features :) Minimal R

m00n 0 Jun 06, 2022
SpamSMS - SPAM SMS menggunakan api web INDIHOME

SPAM SMS Unlimited SPAM SMS menggunakan api web INDIHOME Cara Install Di Termux

Zuck-Ker 1 Jan 08, 2022
This is a simple bot for running Python code through Discord

Python Code Runner Discord Bot This is a simple bot for running Python code through Discord. It was originally developed for the Beginner.Codes Discor

beginner.py 1 Feb 14, 2022
A multi-platform HTTP(S) Reverse Shell Server and Client in Python 3

Phantom - A multi-platform HTTP(S) Reverse Shell Server and Client Phantom is a multi-platform HTTP(S) Reverse Shell server and client in Python 3. Bi

85 Nov 18, 2022
Holly ♥️ is usefull group management bot in telegram 🎋

Holly ♥️ is usefull group management bot in telegram 🎋

Kasun bandara 1 Dec 03, 2021
SSH-Restricted deploys an SSH compliance rule (AWS Config) with auto-remediation via AWS Lambda if SSH access is public.

SSH-Restricted SSH-Restricted deploys an SSH compliance rule with auto-remediation via AWS Lambda if SSH access is public. SSH-Auto-Restricted checks

Adrian Hornsby 30 Nov 08, 2022
Reverse engineering the dengue virus (under development construction)

Reverse engineering the dengue virus (under development 🚧 ) What is dengue? Dengue is a viral infection transmitted to humans through the bite of inf

kjain 4 Feb 09, 2022
Display relevant information for the amazing Banano coin.

Display relevant information for the amazing Banano coin. It'll also show your current [email 

Ron Talman 4 Aug 14, 2022
🕵️‍♂️ Investigate Google Accounts with emails.

Description GHunt is an OSINT tool to extract information from any Google Account using an email. It can currently extract: Owner's name Last time the

mxrch 13.1k Jan 01, 2023
Elemeno.ai standard development kit in Python

Overview A set of glue code and utilities to make using elemeno AI platform a smooth experience Free software: Apache Software License 2.0 Installatio

Elemeno AI 3 Dec 14, 2022
An API wrapper library for opensea api.

Opensea API An API wrapper library for opensea api. Installation pip3 install opensea Usage Retrieving assets: from opensea import get_assets # This

Ankush Singh 38 Jul 17, 2022
🔍 Google Search unofficial API for Python with no external dependencies

Python Google Search API Unofficial Google Search API for Python. It uses web scraping in the background and is compatible with both Python 2 and 3. W

Avi Aryan 204 Dec 28, 2022
GG Dorking is a tool to generate GitHub and Google dorking for pentesters and bug bounty hunters.

GG-Dorking GG Dorking is a python tool to generate GitHub and Google dorking links for pentesters and bug bounty hunters. It will help you to find imp

Eslam Akl 80 Nov 24, 2022
FAIR Enough Metrics is an API for various FAIR Metrics Tests, written in python

☑️ FAIR Enough metrics for research FAIR Enough Metrics is an API for various FAIR Metrics Tests, written in python, conforming to the specifications

Maastricht University IDS 3 Jul 06, 2022
Crypto trading bot that detects surges in the bitcoin price and executes trades.

The bot will be trading Bitcoin automatically if the price has increased by more than 3% in the last 10 minutes. We will have a stop loss of 5% and t

164 Oct 20, 2022
MSE5050/7050 Materials Informatics course at the University of Utah

MaterialsInformatics MSE5050/7050 Materials Informatics course at the University of Utah This github repo contains coursework content such as class sl

41 Dec 30, 2022
A supabase client for python

supabase-client A Supabase client for Python. This mirrors the design of supabase-js Full documentation: https://keosariel.github.io/2021/08/08/supaba

kenneth gabriel 11 Dec 19, 2022
A Telegram Userbot to play Audio and Video songs / files in Telegram Voice Chats

TG-MusicPlayer A Telegram Userbot to play Audio and Video songs / files in Telegram Voice Chats. It's made with PyTgCalls and Pyrogram Requirements Py

Mᴏᴏɴʟɪɢʜᴛ 4 Dec 14, 2022