update bot, scraping
This commit is contained in:
87
bot.py
87
bot.py
@ -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
|
||||||
|
11
models.py
11
models.py
@ -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
|
||||||
|
Reference in New Issue
Block a user