update bot, scraping

This commit is contained in:
churl
2022-01-19 15:09:52 +01:00
parent 430bc562be
commit 86de99d860
2 changed files with 31 additions and 67 deletions

87
bot.py
View File

@ -7,14 +7,10 @@ import datetime
import asyncio import asyncio
from dotenv import load_dotenv from dotenv import load_dotenv
from models import Models
import discord import discord
# from discord import Intents
# from scraper import Girls
# from textgen import TextGen
load_dotenv() load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN") TOKEN = os.getenv("DISCORD_TOKEN")
GUILD = os.getenv("DISCORD_GUILD") # Zocken mit Heidi GUILD = os.getenv("DISCORD_GUILD") # Zocken mit Heidi
@ -23,43 +19,31 @@ GUILD = os.getenv("DISCORD_GUILD") # Zocken mit Heidi
class HeidiClient(discord.Client): class HeidiClient(discord.Client):
def __init__(self): def __init__(self):
super().__init__( super().__init__(
# intents=Intents.default(),
status="Nur eine kann Germany's next Topmodel werden!", status="Nur eine kann Germany's next Topmodel werden!",
) )
self.prefix = "Heidi, " self.prefix = "Heidi, "
self.prefix_regex = "^" + self.prefix self.prefix_regex = "^" + self.prefix
self.girls = Girls() # scraped model list self.models = Models() # scraped model list
self.bible = TextGen("bible.txt", 3)
self.triggers = {} # automatic actions self.triggers = {
self.triggers[ lambda m: m.author.nick.lower() in self.models.get_in_names(): self.autoreact_to_girls,
lambda m: m.author.nick.lower() in self.girls.get_in_names() lambda m: "jeremy" in m.author.nick.lower(): self.autoreact_to_jeremy
] = self.autoreact_to_girls } # automatic actions
self.triggers[
lambda m: "jeremy" in m.author.nick.lower()
] = self.autoreact_to_jeremy
self.matchers = {} # react to messages self.matchers = {"Hilfe$": self.show_help, "Heidi!$": self.say_name,
self.matchers["Hilfe$"] = self.show_help "wer ist dabei\\?$": self.list_models_in,
self.matchers["Heidi!$"] = self.say_name "wer ist raus\\?$": self.list_models_out,
self.matchers["wer ist dabei\\?$"] = self.list_models_in ".+, ja oder nein\\?$": self.magic_shell, "wähle: (.+,?)+$": self.choose,
self.matchers["wer ist raus\\?$"] = self.list_models_out "gib Link": self.show_link, "welche Farbe .+\\?$": self.random_color,
self.matchers[".+, ja oder nein\\?$"] = self.magic_shell "sag kein Foto$": self.say_kein_foto,
self.matchers["wähle: (.+,?)+$"] = self.choose "sag Opfer": self.say_opfer
self.matchers["gib Bild von .+$"] = self.show_model_picture } # react to messages
self.matchers["Countdown$"] = self.countdown
self.matchers["gib Link"] = self.show_link
self.matchers["welche Farbe .+\\?$"] = self.random_color
self.matchers["Bibelfake"] = self.generate_bible_quote
### Voicelines # Voicelines
self.matchers["sag kein Foto$"] = self.say_kein_foto # Helpers ------------------------------------------------------------------------------------
self.matchers["sag Opfer"] = self.say_opfer
### Helpers ------------------------------------------------------------------------------------
def _help_text(self): def _help_text(self):
""" """
@ -89,7 +73,7 @@ class HeidiClient(discord.Client):
""" """
return re.match(self.prefix_regex + matcher, message.content, re.IGNORECASE) return re.match(self.prefix_regex + matcher, message.content, re.IGNORECASE)
### Events ------------------------------------------------------------------------------------- # Events -------------------------------------------------------------------------------------
async def on_ready(self): async def on_ready(self):
print(f"{self.user} (id: {self.user.id}) has connected to Discord!") print(f"{self.user} (id: {self.user.id}) has connected to Discord!")
@ -108,7 +92,7 @@ class HeidiClient(discord.Client):
await self.matchers[matcher](message) await self.matchers[matcher](message)
break break
### Commands ----------------------------------------------------------------------------------- # Commands -----------------------------------------------------------------------------------
async def show_help(self, message): async def show_help(self, message):
""" """
@ -126,13 +110,13 @@ class HeidiClient(discord.Client):
""" """
wer ist dabei? (Liste der Models welche noch GNTM werden können) wer ist dabei? (Liste der Models welche noch GNTM werden können)
""" """
await message.channel.send("\n".join(self.girls.get_in_names())) await message.channel.send("\n".join(self.models.get_in_names()))
async def list_models_out(self, message): async def list_models_out(self, message):
""" """
wer ist raus? (Liste der Keks welche ich ge*ickt hab) wer ist raus? (Liste der Keks welche ich ge*ickt hab)
""" """
await message.channel.send("\n".join(self.girls.get_out_names())) await message.channel.send("\n".join(self.models.get_out_names()))
async def show_model_picture(self, message): async def show_model_picture(self, message):
""" """
@ -140,7 +124,7 @@ class HeidiClient(discord.Client):
""" """
name = message.content.split()[-1] name = message.content.split()[-1]
picture = discord.Embed() picture = discord.Embed()
picture.set_image(url=self.girls.get_image(name)) picture.set_image(url=self.models.get_image(name))
picture.set_footer(text=name) picture.set_footer(text=name)
await message.channel.send(embed=picture) await message.channel.send(embed=picture)
@ -169,23 +153,6 @@ class HeidiClient(discord.Client):
choices = message.content.replace(",", "").split()[2:] choices = message.content.replace(",", "").split()[2:]
await message.channel.send(random.choice(choices)) await message.channel.send(random.choice(choices))
async def countdown(self, message):
"""
Countdown (Zeit bis zur nächsten Folge)
"""
date = datetime.date.today()
while date.weekday() != 3: # 3 for thursday
date += datetime.timedelta(1)
next_gntm = datetime.datetime(date.year, date.month, date.day, 20, 15)
delta = next_gntm - datetime.datetime.now()
hours, rem = divmod(delta.seconds, 3600)
minutes, seconds = divmod(rem, 60)
await message.channel.send(
f"Noch {delta.days} Tage, {hours} Stunden und {minutes} Minuten bis zur nächsten Folge GNTM!"
)
async def show_link(self, message): async def show_link(self, message):
""" """
gib Link (Link zum Stream) gib Link (Link zum Stream)
@ -219,14 +186,7 @@ class HeidiClient(discord.Client):
] ]
await message.channel.send(random.choice(choices)) await message.channel.send(random.choice(choices))
async def generate_bible_quote(self, message): # Voiceboard ---------------------------------------------------------------------------------
"""
Bibelfake! (Unsinn generieren)
"""
quote = self.bible.generate_sentence()
await message.channel.send(" ".join(quote))
### Voiceboard ---------------------------------------------------------------------------------
async def say_kein_foto(self, message): async def say_kein_foto(self, message):
""" """
@ -264,7 +224,7 @@ class HeidiClient(discord.Client):
await voice_client.disconnect() await voice_client.disconnect()
### Automatic Actions -------------------------------------------------------------------------- # Automatic Actions --------------------------------------------------------------------------
async def autoreact_to_girls(self, message): async def autoreact_to_girls(self, message):
""" """
@ -272,7 +232,6 @@ class HeidiClient(discord.Client):
""" """
await message.add_reaction("") await message.add_reaction("")
async def autoreact_to_jeremy(self, message): async def autoreact_to_jeremy(self, message):
""" """
Ich ❤-e Nachrichten von Jeremy Ich ❤-e Nachrichten von Jeremy

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import requests import requests
import re
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
@ -14,8 +15,9 @@ class Models:
girls_in = soup_girls.findAll("a", class_="candidate-in") girls_in = soup_girls.findAll("a", class_="candidate-in")
girls_out = soup_girls.findAll("a", class_="candidate-out") girls_out = soup_girls.findAll("a", class_="candidate-out")
self.girls_in = {girl.find("h4", class_="candidate-title").text.lower(): girl for girl in girls_in} self.girls_in = {girl.get("title").lower(): girl for girl in girls_in}
self.girls_out = {girl.find("h4", class_="candidate-title").text.lower(): girl for girl in girls_out} self.girls_out = {girl.get("title").lower(): girl for girl in girls_out}
self.girls = {**self.girls_in, **self.girls_out} self.girls = {**self.girls_in, **self.girls_out}
def get_in_names(self): def get_in_names(self):
@ -25,4 +27,7 @@ class Models:
return self.girls_out.keys() return self.girls_out.keys()
def get_image(self, name): def get_image(self, name):
return self.girls[name.lower()].find("figure", class_="teaser-img")["style"].split("\"")[1] style = self.girls[name.lower()].find("figure", class_="teaser-img").get("style")
url = re.search(r"url\(.*\);", style).group()
return url[4:-9] + "562x996" # increase resolution