mirror of
https://github.com/luigieai/homelab.git
synced 2025-06-07 16:06:35 -03:00
feat(nomad): twitchminer deploy
This commit is contained in:
parent
acc1cca66a
commit
7b0ef54a57
8 changed files with 219 additions and 0 deletions
|
@ -39,3 +39,13 @@ module "icecast" {
|
||||||
nomad = nomad
|
nomad = nomad
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module "twitchminer" {
|
||||||
|
source = "./modules/twitchminer"
|
||||||
|
discord_webhook = var.discord_webhook
|
||||||
|
twitch_username = var.twitch_username
|
||||||
|
twitch_password = var.twitch_password
|
||||||
|
providers = {
|
||||||
|
nomad = nomad
|
||||||
|
}
|
||||||
|
}
|
91
terraform/modules/twitchminer/conf/run.py
Normal file
91
terraform/modules/twitchminer/conf/run.py
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from colorama import Fore
|
||||||
|
from TwitchChannelPointsMiner import TwitchChannelPointsMiner
|
||||||
|
from TwitchChannelPointsMiner.logger import LoggerSettings, ColorPalette
|
||||||
|
from TwitchChannelPointsMiner.classes.Chat import ChatPresence
|
||||||
|
from TwitchChannelPointsMiner.classes.Discord import Discord
|
||||||
|
from TwitchChannelPointsMiner.classes.Webhook import Webhook
|
||||||
|
from TwitchChannelPointsMiner.classes.Telegram import Telegram
|
||||||
|
from TwitchChannelPointsMiner.classes.Matrix import Matrix
|
||||||
|
from TwitchChannelPointsMiner.classes.Pushover import Pushover
|
||||||
|
from TwitchChannelPointsMiner.classes.Settings import Priority, Events, FollowersOrder
|
||||||
|
from TwitchChannelPointsMiner.classes.entities.Bet import Strategy, BetSettings, Condition, OutcomeKeys, FilterCondition, DelayMode
|
||||||
|
from TwitchChannelPointsMiner.classes.entities.Streamer import Streamer, StreamerSettings
|
||||||
|
|
||||||
|
twitch_miner = TwitchChannelPointsMiner(
|
||||||
|
username="${twitch_username}",
|
||||||
|
password="${twitch_password}", # If no password will be provided, the script will ask interactively
|
||||||
|
claim_drops_startup=False, # If you want to auto claim all drops from Twitch inventory on the startup
|
||||||
|
priority=[ # Custom priority in this case for example:
|
||||||
|
Priority.ORDER # - When we have all of the drops claimed and no watch-streak available, use the order priority (POINTS_ASCENDING, POINTS_DESCENDING)
|
||||||
|
],
|
||||||
|
enable_analytics=False, # Disables Analytics if False. Disabling it significantly reduces memory consumption
|
||||||
|
disable_ssl_cert_verification=False, # Set to True at your own risk and only to fix SSL: CERTIFICATE_VERIFY_FAILED error
|
||||||
|
disable_at_in_nickname=False, # Set to True if you want to check for your nickname mentions in the chat even without @ sign
|
||||||
|
logger_settings=LoggerSettings(
|
||||||
|
save=True, # If you want to save logs in a file (suggested)
|
||||||
|
console_level=logging.INFO, # Level of logs - use logging.DEBUG for more info
|
||||||
|
console_username=True, # Adds a username to every console log line if True. Also adds it to Telegram, Discord, etc. Useful when you have several accounts
|
||||||
|
auto_clear=True, # Create a file rotation handler with interval = 1D and backupCount = 7 if True (default)
|
||||||
|
time_zone="America/Sao_Paulo", # Set a specific time zone for console and file loggers. Use tz database names. Example: "America/Denver"
|
||||||
|
file_level=logging.INFO, # Level of logs - If you think the log file it's too big, use logging.INFO
|
||||||
|
emoji=True, # On Windows, we have a problem printing emoji. Set to false if you have a problem
|
||||||
|
less=False, # If you think that the logs are too verbose, set this to True
|
||||||
|
colored=True, # If you want to print colored text
|
||||||
|
color_palette=ColorPalette( # You can also create a custom palette color (for the common message).
|
||||||
|
STREAMER_online="GREEN", # Don't worry about lower/upper case. The script will parse all the values.
|
||||||
|
streamer_offline='red', # Read more in README.md
|
||||||
|
BET_wiN=Fore.MAGENTA # Color allowed are: [BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET].
|
||||||
|
),
|
||||||
|
discord=Discord(
|
||||||
|
webhook_api="${discord_webhook}", # Discord Webhook URL
|
||||||
|
events=[Events.STREAMER_ONLINE, Events.STREAMER_OFFLINE, Events.CHAT_MENTION,
|
||||||
|
Events.MOMENT_CLAIM, Events.BONUS_CLAIM, Events.GAIN_FOR_WATCH, Events.GAIN_FOR_CLAIM], # Only these events will be sent to the chat
|
||||||
|
),
|
||||||
|
),
|
||||||
|
streamer_settings=StreamerSettings(
|
||||||
|
make_predictions=False, # If you want to Bet / Make prediction
|
||||||
|
follow_raid=True, # Follow raid to obtain more points
|
||||||
|
claim_drops=False, # We can't filter rewards base on stream. Set to False for skip viewing counter increase and you will never obtain a drop reward from this script. Issue #21
|
||||||
|
claim_moments=True, # If set to True, https://help.twitch.tv/s/article/moments will be claimed when available
|
||||||
|
watch_streak=False, # If a streamer go online change the priority of streamers array and catch the watch screak. Issue #11
|
||||||
|
chat=ChatPresence.ONLINE, # Join irc chat to increase watch-time [ALWAYS, NEVER, ONLINE, OFFLINE]
|
||||||
|
bet=BetSettings(
|
||||||
|
strategy=Strategy.SMART, # Choose you strategy!
|
||||||
|
percentage=5, # Place the x% of your channel points
|
||||||
|
percentage_gap=20, # Gap difference between outcomesA and outcomesB (for SMART strategy)
|
||||||
|
max_points=50000, # If the x percentage of your channel points is gt bet_max_points set this value
|
||||||
|
stealth_mode=True, # If the calculated amount of channel points is GT the highest bet, place the highest value minus 1-2 points Issue #33
|
||||||
|
delay_mode=DelayMode.FROM_END, # When placing a bet, we will wait until `delay` seconds before the end of the timer
|
||||||
|
delay=6,
|
||||||
|
minimum_points=20000, # Place the bet only if we have at least 20k points. Issue #113
|
||||||
|
filter_condition=FilterCondition(
|
||||||
|
by=OutcomeKeys.TOTAL_USERS, # Where apply the filter. Allowed [PERCENTAGE_USERS, ODDS_PERCENTAGE, ODDS, TOP_POINTS, TOTAL_USERS, TOTAL_POINTS]
|
||||||
|
where=Condition.LTE, # 'by' must be [GT, LT, GTE, LTE] than value
|
||||||
|
value=800
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
# You can customize the settings for each streamer. If not settings were provided, the script would use the streamer_settings from TwitchChannelPointsMiner.
|
||||||
|
# If no streamer_settings are provided in TwitchChannelPointsMiner the script will use default settings.
|
||||||
|
# The streamers array can be a String -> username or Streamer instance.
|
||||||
|
|
||||||
|
# The settings priority are: settings in mine function, settings in TwitchChannelPointsMiner instance, default settings.
|
||||||
|
# For example, if in the mine function you don't provide any value for 'make_prediction' but you have set it on TwitchChannelPointsMiner instance, the script will take the value from here.
|
||||||
|
# If you haven't set any value even in the instance the default one will be used
|
||||||
|
|
||||||
|
#twitch_miner.analytics(host="127.0.0.1", port=5000, refresh=5, days_ago=7) # Start the Analytics web-server
|
||||||
|
|
||||||
|
twitch_miner.mine(
|
||||||
|
[
|
||||||
|
"hydrasung",
|
||||||
|
"bida",
|
||||||
|
"gaules",
|
||||||
|
], # Array of streamers (order = priority)
|
||||||
|
followers=False, # Automatic download the list of your followers
|
||||||
|
followers_order=FollowersOrder.ASC # Sort the followers list by follow date. ASC or DESC
|
||||||
|
)
|
66
terraform/modules/twitchminer/conf/twitchminer.hcl
Normal file
66
terraform/modules/twitchminer/conf/twitchminer.hcl
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
job "twitchminer" {
|
||||||
|
datacenters = ["dc"]
|
||||||
|
type = "service"
|
||||||
|
|
||||||
|
group "twitchminer" {
|
||||||
|
count = 1
|
||||||
|
|
||||||
|
network {
|
||||||
|
|
||||||
|
port "twitchminer_port" {
|
||||||
|
static = 5001
|
||||||
|
to = 5000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
restart {
|
||||||
|
attempts = 2
|
||||||
|
interval = "5m"
|
||||||
|
delay = "30s"
|
||||||
|
mode = "delay"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
task "twitchminer" {
|
||||||
|
driver = "docker"
|
||||||
|
|
||||||
|
config {
|
||||||
|
image = "rdavidoff/twitch-channel-points-miner-v2:1.9.5"
|
||||||
|
image_pull_timeout = "20m"
|
||||||
|
#network_mode = "host"
|
||||||
|
volumes = [
|
||||||
|
"${NOMAD_ALLOC_DIR}/twitchminer/analytics:/usr/src/app/analytics",
|
||||||
|
"${NOMAD_ALLOC_DIR}/twitchminer/cookies:/usr/src/app/cookies",
|
||||||
|
"${NOMAD_ALLOC_DIR}/twitchminer/logs:/usr/src/app/logs",
|
||||||
|
"local/run.py:/usr/src/app/run.py",
|
||||||
|
]
|
||||||
|
ports = ["twitchminer_port"]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
env {
|
||||||
|
TERM="xterm-256color"
|
||||||
|
}
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "twitchminer"
|
||||||
|
port = "twitchminer_port"
|
||||||
|
provider = "nomad"
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = <<EOF
|
||||||
|
${RUN_FILE}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
destination = "local/run.py" # Rendered template.
|
||||||
|
|
||||||
|
# Caddy doesn't support reload via signals as of
|
||||||
|
change_mode = "restart"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
8
terraform/modules/twitchminer/data.tf
Normal file
8
terraform/modules/twitchminer/data.tf
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
data "template_file" "runpy" {
|
||||||
|
template = file("${path.module}/conf/run.py")
|
||||||
|
vars = {
|
||||||
|
discord_webhook = var.discord_webhook
|
||||||
|
twitch_username = var.twitch_username
|
||||||
|
twitch_password = var.twitch_password
|
||||||
|
}
|
||||||
|
}
|
6
terraform/modules/twitchminer/job.tf
Normal file
6
terraform/modules/twitchminer/job.tf
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
resource "nomad_job" "app_twitchminer" {
|
||||||
|
jobspec = templatefile("${path.module}/conf/twitchminer.hcl", {
|
||||||
|
NOMAD_ALLOC_DIR = "/alloc"
|
||||||
|
RUN_FILE = data.template_file.runpy.rendered
|
||||||
|
})
|
||||||
|
}
|
9
terraform/modules/twitchminer/providers..tf
Normal file
9
terraform/modules/twitchminer/providers..tf
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
nomad = {
|
||||||
|
source = "hashicorp/nomad"
|
||||||
|
version = "2.0.0-rc.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
required_version = ">= 0.14"
|
||||||
|
}
|
14
terraform/modules/twitchminer/variables.tf
Normal file
14
terraform/modules/twitchminer/variables.tf
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
variable "discord_webhook" {
|
||||||
|
type = string
|
||||||
|
description = "Discord webhook"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "twitch_username" {
|
||||||
|
type = string
|
||||||
|
description = "Twitch username"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "twitch_password" {
|
||||||
|
type = string
|
||||||
|
description = "Twitch password"
|
||||||
|
}
|
|
@ -32,3 +32,18 @@ variable "kc_password" {
|
||||||
type = string
|
type = string
|
||||||
description = "Keycloak default password"
|
description = "Keycloak default password"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "discord_webhook" {
|
||||||
|
type = string
|
||||||
|
description = "Discord webhook"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "twitch_username" {
|
||||||
|
type = string
|
||||||
|
description = "Twitch username"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "twitch_password" {
|
||||||
|
type = string
|
||||||
|
description = "Twitch password"
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue