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
Lumi-Bot - Discord bot that fetches cryptocurrency prices utilizing CoinGeko API

Lumi-Bot Discord bot that fetches and monitors cryptocurrency prices utilizing C

Diego Castro 2 Oct 08, 2022
A simple discord bot named atticus that sends you the timetable of your classes upon request

A simple discord bot named atticus that sends you the timetable of your classes upon request. Soon, it would you ping you before classes too!

Samhitha 3 Oct 13, 2022
Command-line program to download image galleries and collections from several image hosting sites

gallery-dl gallery-dl is a command-line program to download image galleries and collections from several image hosting sites (see Supported Sites). It

Mike Fährmann 6.4k Jan 06, 2023
A anti-repostbot script for reddit, runs u/ThisIsARepostBotBot

ThisIsARepostBotBot So you found a repost bot, now what? This is a bot to reply to all posts of a repost bot with a message urging users to report and

3 May 23, 2022
TrollWare 🤡 is the most advanced Discord Malware & RAT

TrollWare 🤡 TrollWare is the most advanced Discord Malware, with a built-in RAT which can be controlled through a Discord Bot Pinned Note: Please giv

doop 74 Jun 09, 2022
Validate all your Customer IAM Policies against AWS Access Analyzer - Policy Validation

✅ Access Analyzer - Batch Policy Validator This script will analyze using AWS Access Analyzer - Policy Validation all your account customer managed IA

Victor GRENU 41 Dec 12, 2022
Clipboard-watcher - Keep an eye on the apps that are using your clipboard

clipboard-watcher This repository contains the code of an experiment, in order t

Gonçalo Valério 48 Oct 13, 2022
Api REST para gerenciamento de cashback.

Documentação API para gerenciamento de cashback - MaisTODOS Features Em construção... Tecnologias utilizadas Back end Python 3.8.10 Django REST Framew

Alinne Grazielle 2 Jan 22, 2022
A simple tool which automate commands of discord economy bots

A simple tool which automate commands of discord economy bots. Fully configurable using an intuitive configuration made in YAML

SkydenFly 5 Sep 18, 2022
An NFTGenerator to generate NFTs and send them to nft.storage

NFTGenerator Table of Contents Overview Installation Introduction Features Reflection Issues & bug reports Show your support Credits Overview The NFTG

3 Mar 14, 2022
A tool that helps keeping track of your AWS quota utilization

aws-quota-checker A tool that helps keeping track of your AWS quota utilization. It'll determine the limits of your AWS account and compare them to th

Max 63 Dec 14, 2022
An attempt to escape the horrible JIRA editor.

An attempt to escape the horrible JIRA editor. jira_filter.py is a pandoc filter that cleans up some of JIRA's html so that it can be converted to Mar

Stefan Matting 2 Feb 10, 2022
TESSARECT A Powerful Bot you'll ever need for anything

Tessarect TESSARECT A Powerful Bot you'll ever need for anything TESSARECT It is my First bot but very advanced and designed for all your needs , from

Prakarsh Prp 4 Aug 27, 2022
Compares and analyzes GCP IAM roles.

gcp-iam-analyzer I wrote this to help in my day to day working in GCP. A lot of the time I am doing role comparisons to see which role has more permis

Jason Dyke 37 Dec 28, 2022
Create Fast and easy image datasets using reddit

Reddit-Image-Scraper Reddit Reddit is an American Social news aggregation, web content rating, and discussion website. Reddit has been devided by topi

Wasin Silakong 4 Apr 27, 2022
派蒙Bot / PaimonBot

派蒙Bot / PaimonBot 基于Mrs4s / go-cqhttp 和 nonebot / nonebot2 的原神QQ群聊机器人 特别鸣谢 MingxuanGame 的人物武器名字自动纠正功能 小灰灰 的人物武器信息api 环境 请务必使用Python3.7以上版本!! 尽量在linux下

晓轩 96 Dec 16, 2022
A script written in python3 for bruteforcing Gmail accounts.

GmailBruteforce Made for bruteforcing gmail accounts. It needs Less Secure Apps setting turned on in order to work. Installation For windows git clone

Shinero 4 Sep 16, 2022
A robust, low-level connector for the Discord API

Bauxite Bauxite is a robust, low-level connector for the Discord API. What is Bauxite for? Bauxite is made for two main purposes: Creating higher-leve

1 Dec 04, 2021
Asynchronous Python API Wrapper for phisherman.gg

Asynchronous Python API Wrapper for phisherman.gg

Qrista Labs 4 Apr 30, 2022
THERE IS AN IMPOSTER AMONG US. VOTE HIM OUT BEFORE HE [ R E D A C T E D ].

🛡️ Guardian There is an impostor among us. Can you help us find out who it is? ⚙️ Installation and Usage Make sure to install Tesseract-OCR before ru

Catus Magnus 1 Jan 06, 2022