Skip to content
Snippets Groups Projects
Commit 93cfb5e2 authored by dnns01's avatar dnns01
Browse files

Added loop to advertise Chat commands regularly (and randomly from the list of available commands)

parent 110e185c
Branches
No related tags found
No related merge requests found
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/info.json" charset="ISO-8859-1" />
</component>
</project>
\ No newline at end of file
......@@ -54,6 +54,8 @@ as the `hausgeist.py` file. This file must look like this:
NICK=<Nick of the user the OAuth Token was generated for>
CHANNEL=<Channel that should be entered>
PREFIX=<Prefix for commands. In this case it is !>
INFO_JSON=<Path to json file that contains info array>
INFO_LOOP=<Number of minutes, when an information is dropped into the chat (only of the stream is live>
# Pipi Bot
PIPI_DELAY=<Delay in seconds as spam protection. This is the number of seconds between two chat announcements>
......
......@@ -6,6 +6,7 @@ from twitchio.dataclasses import Context, Message, Channel
from twitchio.ext import commands
from giveaway_cog import GiveawayGog
from info_cog import InfoCog
from pipi_cog import PipiCog
from vote_cog import VoteCog
......@@ -31,9 +32,11 @@ class HaugeBot(commands.Bot, ABC):
self.pipi_cog = PipiCog(self)
self.giveaway_cog = GiveawayGog(self)
self.vote_cog = VoteCog(self)
self.info_cog = InfoCog(self)
self.add_cog(self.pipi_cog)
self.add_cog(self.giveaway_cog)
self.add_cog(self.vote_cog)
self.add_cog(self.info_cog)
@staticmethod
async def send_me(ctx, content, color):
......@@ -49,6 +52,7 @@ class HaugeBot(commands.Bot, ABC):
async def event_ready(self):
print('Logged in')
await self.pipi_cog.start_pipimeter_loop()
await self.info_cog.start_info_loop()
@staticmethod
def get_percentage(part, total):
......@@ -58,16 +62,13 @@ class HaugeBot(commands.Bot, ABC):
return 0
def get_channel(self, **kwargs):
if kwargs:
return self.get_channel(kwargs)
def channel(self):
return self.get_channel(self.CHANNEL)
async def get_chatters(self):
async def chatters(self):
return await self.get_chatters(self.CHANNEL)
async def get_stream(self):
async def stream(self):
return await self.get_stream(self.CHANNEL)
......
[
"mit !subs kannst du dir anzeigen lassen, wie viele haugeSun -e Menschen diesen Kanal derzeit mit einem Sub unterstützen.",
"mit !time kannst du dir die aktuelle Uhrzeit bei Hauke in Tokyo anzeigen lassen.",
"mit !pipi kannst du Hauke einen Hinweis hinterlassen, dass du demnächst mal eine Pause bräuchtest, um zum Beispiel Pipi zu machen. Außerdem kannst du mit !warpipi mitteilen, dass sich dein Wunsch nach einer Pause inzwischen erledigt hat.",
"mit !wishlist erhälst du den Link zu Haukes Amazon Wishlist.",
"mit !zeit kannst du dir die aktuelle Uhrzeit bei Hauke in Tokyo anzeigen lassen.",
"mit !amazon erhälst du Haukes Amazon Affiliate Link.",
"mit !art erhälst du die Information, wer für das wunderbare Design dieses tollen Twitch-Kanals verantwortlich ist.",
"mit !artists erhälst du die Links zu allen Musik Artists, deren Musik hier während des Streams immer im Hintergrund läuft.",
"mit !campfire bekommst du weitere Informationen zur interaktiven Hörspielapp Campfire.",
"mit !discord erfährst du den Link zum Discord Server dieses Kanals.",
"mit !donate erhälst du weitere Informationen, wie du Hauke durch eine Spende unterstützen kannst.",
"mit !game bekommst du weitere Informationen zum Morriton Manor Spiel.",
"wenn du Hauke auf Instagram folgen möchtest, dann schreib einfach !instagram in den Chat und du bekommst den Link zu Haukes Profil.",
"wenn dir die Playlist, die gerade im Hintergrund läuft gefällt, dann schreib doch mal !playlist in den Chat und du erhälst den Link zur Spotify Playlist.",
"falls du nicht genug von Hauke und Japan bekommen kannst, einfach !podcast in den Chat und du bekommst den Link zu seinem FYEO Podcast.",
"als Besitzer von Amazon Prime kannst du jeden Monat einen Twitch Kanal deiner Wahl kostenlos abonnieren. Falls du wissen möchtest, wie das geht, !prime in den Chat und du bekommst alle notwendigen Informationen.",
"wenn du studierst und noch kein Amazon Prime hast, dann kannst du dies zu bevorzugten Konditionen abschließen. Falls dich das interessiert, gib einfach mal !primestudent in den Chat und du erhälst einen Link mit allen notwendigen Informationen.",
"als alte(r) Reisliebhaber(in) kannst du von Haukes Partnerschaft mit Reishunger profitieren. Alle Informationen hierzu: !reishunger",
"mit !song kannst du dir Informationen zum aktuell laufenden Song anzeigen lassen.",
"du kannst sogar subben, wenn du den Stream am Handy schaust. Gib mal !sub in den Chat ein, wenn dich interessiert, wie das geht.",
"falls du Hauke auch auf Twitter folgen möchtest, !twitter in den Chat, und du bekommst sofort einen Link dafür.",
"mit !wort kannst du dir das Wort des Tages anzeigen lassen.",
"Hauke hat nicht nur einen Twitch Kanal, auf dem er regelmäßig streamt. Regelmäßig erscheinen auf YouTube auch Videos mit Ausschnitten des Streams, oder extra dafür produzierten Videos. Mit !youtube erhälst du den Link zum YouTube Kanal."
]
\ No newline at end of file
import asyncio
import json
import os
import random
from twitchio.ext import commands
@commands.core.cog(name="InfoCog")
class InfoCog:
def __init__(self, bot):
self.bot = bot
self.info_file = os.getenv("INFO_JSON")
self.INFO_LOOP = int(os.getenv("INFO_LOOP"))
self.INFO_COLOR = os.getenv("INFO_COLOR")
self.info = []
self.load_info()
def load_info(self):
""" Loads all info that should be sent to the chat regularly from INFO_JSON """
info_file = open(self.info_file, mode='r')
self.info = json.load(info_file)
pass
async def start_info_loop(self):
print("Starting Loop")
asyncio.create_task(self.info_loop())
async def info_loop(self):
""" Send !pipimeter into the chat every x Minutes. Also check, whether the stream was offline for x Minutes.
If this is true, reset the pipi counter, as you can assume, that the stream recently started."""
while True:
print(f"Loop started. Sleeping for {self.INFO_LOOP} minutes")
await asyncio.sleep(self.INFO_LOOP * 60)
print("Hey.... wake up!")
if await self.bot.stream():
channel = self.bot.channel()
message = f"Psssst... wusstest du eigentlich schon, {random.choice(self.info)}"
await self.bot.send_me(channel, message, self.INFO_COLOR)
......@@ -35,7 +35,7 @@ class PipiCog:
self.pipi_task = asyncio.create_task(self.pipi_block_notification())
vote_ctr = 0
chatters = await self.bot.get_chatters()
chatters = await self.bot.chatters()
if message is not None:
await self.bot.send_me(ctx, message, self.COLOR_0)
......@@ -75,13 +75,13 @@ class PipiCog:
while True:
await asyncio.sleep(self.PIPIMETER_LOOP * 60)
if await self.bot.get_stream():
if await self.bot.stream():
if offline_since >= self.RESET_THRESHOLD:
self.pipi_votes = {}
offline_since = 0
if len(self.pipi_votes) > 0:
channel = self.bot.get_channel()
channel = self.bot.channel()
message = Message(channel=channel)
await self.notify_pipi(message, use_timer=False)
else:
......
......@@ -61,7 +61,7 @@ class VoteCog:
if not self.vote_end_task.done() and len(self.votes) >= self.MIN_VOTES:
await self.notify_vote_result(channel)
self.vote_interim_task = asyncio.create_task(
self.vote_interim_voting(self.bot.get_channel()))
self.vote_interim_voting(self.bot.channel()))
async def vote_block_votes(self):
""" Just do nothing but sleep for VOTE_DELAY_INTERIM seconds """
......@@ -110,9 +110,9 @@ class VoteCog:
return
if len(self.votes) == 0:
self.vote_end_task = asyncio.create_task(self.vote_end_voting(self.bot.get_channel()))
self.vote_end_task = asyncio.create_task(self.vote_end_voting(self.bot.channel()))
self.vote_interim_task = asyncio.create_task(
self.vote_interim_voting(self.bot.get_channel()))
self.vote_interim_voting(self.bot.channel()))
# should vote extend voting?
if ctx.author.name not in self.votes or self.votes[ctx.author.name] != votetype:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment