diff --git a/terraform/main.tf b/terraform/main.tf index fbeaa0f..8a8c540 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -35,6 +35,16 @@ module "keycloak" { module "icecast" { source = "./modules/icecast" + providers = { + 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 } diff --git a/terraform/modules/twitchminer/conf/run.py b/terraform/modules/twitchminer/conf/run.py new file mode 100644 index 0000000..148c800 --- /dev/null +++ b/terraform/modules/twitchminer/conf/run.py @@ -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 +) \ No newline at end of file diff --git a/terraform/modules/twitchminer/conf/twitchminer.hcl b/terraform/modules/twitchminer/conf/twitchminer.hcl new file mode 100644 index 0000000..df2a8f2 --- /dev/null +++ b/terraform/modules/twitchminer/conf/twitchminer.hcl @@ -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 = <