diff --git a/bot.py b/bot.py index 89676ec..b049f43 100644 --- a/bot.py +++ b/bot.py @@ -1,42 +1,121 @@ import os +from random import randrange +from dotenv import load_dotenv from twitchio.ext import commands +from twitchio.http import TwitchHTTP +from twitchio import PartialUser, Client class Bot(commands.Bot): + count_to_hydrate = 0 + count_to_prime_spam = 0 + capital_warning = {} def __init__(self): super().__init__(token=os.environ['TMI_TOKEN'], - # client_id=os.environ['CLIENT_ID'], + client_id=os.environ['CLIENT_ID'], nick=os.environ['BOT_NICK'], prefix=os.environ['BOT_PREFIX'], initial_channels=[os.environ['CHANNEL']]) + self.client = Client(os.environ['TMI_TOKEN']) + self.http = TwitchHTTP(client=self.client, client_id=os.environ['CLIENT_ID'], + client_secret=os.environ['CLIENT_SECRET']) async def event_ready(self): # We are logged in and ready to chat and use commands... print(f'Logged in as | {self.nick}') print(f'User id is | {self.user_id}') - await bot.connected_channels[0].send('/me El brujero ha llegado!') - async def event_message(self, message): + await bot.connected_channels[0].send('/me {}'.format(os.environ['ARRIVAL'])) + + async def event_message(self, ctx, *, user=None): # Messages with echo set to True are messages sent by the bot... # For now we just want to ignore them... - if message.echo: + if ctx.echo: return - - # Print the contents of our message to console... - print(message.content) - # Since we have commands and are overriding the default `event_message` # We must let the bot know we want to handle and invoke our commands... - await self.handle_commands(message) + await self.handle_commands(ctx) - @commands.command() - async def hello(self, ctx: commands.Context): - # Send a hello back! - await ctx.send('Hello world') + # Replies someone if have written the substring in the if + if 'hola caracola' in ctx.content.lower(): + await ctx.channel.send('Hola caracola @{}'.format(ctx.author.display_name)) + + # For each 100 messages, send one + self.count_to_hydrate += 1 + self.count_to_prime_spam += 1 + if self.count_to_hydrate == 10: + self.count_to_hydrate = 0 + await ctx.channel.send('/me Recordad hidrataros!!') + if self.count_to_prime_spam == 15: + self.count_to_prime_spam = 0 + await ctx.channel.send( + '/me Recordad que si queréis apoyar el directo, podéis utilizar el prime en este canal.') + + if ctx.content.isupper() and len(ctx.content) > 5: + # if not ctx.author.is_mod: + if ctx.author.name in self.capital_warning and self.capital_warning[ctx.author.name] < 4: + self.capital_warning[ctx.author.name] += 1 + await ctx.channel.send( + 'Menos gritos con los gritos @{}. Llevas con este {} avisos por gritar, al quinto ' + 'te ganas un pequeño timeout'.format(ctx.author.display_name, + self.capital_warning[ctx.author.name])) + elif ctx.author.name in self.capital_warning and self.capital_warning[ctx.author.name] >= 4: + await ctx.channel.send('Quien avisa no es traidor. @{}, el usuario @{} ha gritado varias veces.'. + format(ctx.channel.name, ctx.author.display_name)) + # await ctx.channel.timeout(ctx.author.name, 5, "Escribir con mayúsculas varias veces") + # await ctx.channel.send('/timeout {} {} Spamear mayúsculas'.format(ctx.author.display_name, 300)) + + # ctx.author.channel + + # TODO: time_out + # user_to_timeout = PartialUser(http=self.http, id=self.client.user_id, name=self.client.nick) + # await user_to_timeout.timeout_user(token=os.environ['TMI_TOKEN'], + # moderator_id=self.user_id, + # user_id=ctx.author.id, duration=5, reason="Spam de mayúsculas") + # await ctx.author.timeout_user(token=os.environ['TMI_TOKEN'], moderator_id=os.environ['CLIENT_ID'], + # user_id=ctx.author.id, duration=5, reason="Spam de mayúsculas") + else: + self.capital_warning[ctx.author.name] = 1 + await ctx.channel.send('Menos gritos con los gritos @{}. Este es el primer aviso ten ' + 'cuidado con llegar a 5'.format(ctx.author.display_name)) + + @commands.command(name='redes') + async def social(self, ctx): + print('\nSending social media...') + await ctx.send('Twitter: {} || Instagram: {} || Discord: {} || Itch: {}'.format(os.environ['TWITTER'], + os.environ['INSTAGRAM'], + os.environ['DISCORD'], + os.environ['ITCHIO'])) + + @commands.command(name='placaje') + async def get_random_chatter(self, ctx): + # print(bot.connected_channels[0].chatters) + print("Tackling...") + list_chatters = list(bot.connected_channels[0].chatters) + + random_indx = randrange(0, len(list_chatters) - 1) + if ctx.author.name == list_chatters[random_indx].name: + random_indx = (random_indx + 1) % (len(list_chatters) - 1) + if list_chatters[random_indx] is None: + await ctx.channel.send('{} has fallado el placaje y te caes al barro.'.format(ctx.author.display_name)) + else: + await ctx.channel.send('{} manda a China a {} de un placaje'.format(ctx.author.display_name, + list_chatters[random_indx].display_name)) + + @commands.command(name='reco') + async def send_recommendation(self, ctx, arg): + print("Recommending channel...") + await ctx.channel.send('Pasad a echarle un ojo al canal de https://www.twitch.tv/{}'.format(arg)) + + @commands.command(name='comandos') + async def my_commands(self, ctx): + print('\nSending my command list...') + await ctx.channel.send('Los comandos disponibles ahora mismo son: !redes, !placaje, !reco. ' + 'También puedes saludar con un "Hola caracola".') if __name__ == "__main__": + load_dotenv() bot = Bot() bot.run() -