USER
import discord
from discord.ext import commands
import sqlite3
from datetime import datetime, timedelta
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
class PersistentView(discord.ui.View):
def __init__(self):
super().__init__(timeout=None)
class BewerbungView(PersistentView):
def __init__(self, cog):
super().__init__()
self.cog = cog
@discord.ui.select(
placeholder="Wähle eine Position",
custom_id="position_select",
options=[
discord.SelectOption(label="🛡️ Moderation Team", value="Moderation Team"),
discord.SelectOption(label="📖 Guide Team", value="Guide Team"),
discord.SelectOption(label="📅 Event Team", value="Event Team"),
]
)
async def select_position(self, select: discord.ui.Select, interaction: discord.Interaction):
try:
await self.cog.start_bewerbung(interaction, select.values[0])
except Exception as e:
print(f"Fehler beim Starten der Bewerbung: {str(e)}")
await interaction.response.send_message(f"Es ist ein Fehler aufgetreten. Bitte versuche es später erneut. - {str(e)}", ephemeral=True)
class AnswerView(PersistentView):
def __init__(self, cog, user_id: int, position: str):
super().__init__()
self.cog = cog
self.user_id = user_id
self.position = position
@discord.ui.button(label="Beantworten", style=discord.ButtonStyle.primary, custom_id="answer_button")
async def answer(self, button: discord.ui.Button, interaction: discord.Interaction):
try:
message_id = interaction.message.id
modal = AnswerModal(self.cog, self.user_id, self.position, message_id)
await interaction.response.send_modal(modal)
except Exception as e:
print(f"Fehler beim Öffnen des Antwort-Modals: {str(e)}")
await interaction.response.send_message(f"Es ist ein Fehler aufgetreten. Bitte versuche es später erneut. - {str(e)}", ephemeral=True)
class Bewerbung(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.conn = sqlite3.connect('./database/bewerbungen.db')
self.cursor = self.conn.cursor()
self.create_table()
def create_table(self):
try:
self.cursor.execute('''CREATE TABLE IF NOT EXISTS bewerbungen
(user_id INTEGER PRIMARY KEY,
position TEXT,
status TEXT,
current_question INTEGER,
answers TEXT,
timestamp DATETIME,
review_message_ids TEXT)''')
self.conn.commit()
except Exception as e:
print(f"Fehler beim Erstellen der Tabelle: {str(e)}")
@commands.Cog.listener()
async def on_ready(self):
self.bot.add_view(BewerbungView(self))
print("Bewerbungs-Cog ist bereit")
try:
self.cursor.execute("SELECT user_id, review_message_ids FROM bewerbungen WHERE status = 'completed'")
rows = self.cursor.fetchall()
for user_id, review_message_ids in rows:
if review_message_ids:
message_ids = review_message_ids.split(",")
for message_id in message_ids:
try:
channel = self.bot.get_channel(1268575457398362208)
message = await channel.fetch_message(int(message_id))
view = BewertungView(self, int(user_id))
self.bot.add_view(view, message_id=message.id)
except Exception as e:
print(f"Fehler beim Hinzufügen der View für Nachricht {message_id}: {str(e)}")
except Exception as e:
print(f"Fehler beim Laden der persistenten Views: {str(e)}")
@commands.command()
@commands.has_permissions(administrator=True)
async def setup_bewerbung(self, ctx):
try:
embed = discord.Embed(title="📋 Bewerbungen", description="Wähle eine Position aus, für die du dich bewerben möchtest.", color=0x3498db)
view = BewerbungView(self)
await ctx.send(embed=embed, view=view)
print(f"Bewerbungs-Setup wurde von {ctx.author} durchgeführt")
except Exception as e:
print(f"Fehler beim Setup der Bewerbung: {str(e)}")
await ctx.send(f"Es ist ein Fehler aufgetreten. Bitte versuche es später erneut. - {str(e)}")
async def start_bewerbung(self, interaction: discord.Interaction, position: str):
try:
user_id = interaction.user.id
self.cursor.execute("SELECT * FROM bewerbungen WHERE user_id = ? AND status = 'in_progress'", (user_id,))
existing_bewerbung = self.cursor.fetchone()
if existing_bewerbung:
await interaction.response.send_message("Du hast bereits eine laufende Bewerbung. Bitte warte, bis diese abgeschlossen ist.", ephemeral=True)
return
self.cursor.execute("INSERT INTO bewerbungen (user_id, position, status, current_question, answers, timestamp) VALUES (?, ?, ?, ?, ?, ?)",
(user_id, position, "in_progress", 0, "", datetime.now()))
self.conn.commit()
await interaction.response.send_message(f"Deine Bewerbung für das **{position}** wurde gestartet. Du erhältst gleich eine DM mit den Fragen.", ephemeral=True)
await self.send_next_question(interaction.user, position)
print(f"Bewerbung für {position} von Benutzer {user_id} gestartet")
except Exception as e:
print(f"Fehler beim Starten der Bewerbung: {str(e)}")
await interaction.response.send_message(f"Es ist ein Fehler aufgetreten. Bitte versuche es später erneut. - {str(e)}", ephemeral=True)
async def send_next_question(self, user: discord.User, position: str):
try:
self.cursor.execute("SELECT current_question FROM bewerbungen WHERE user_id = ?", (user.id,))
current_question = self.cursor.fetchone()[0]
questions = self.get_questions(position)
if current_question >= len(questions):
await self.finish_bewerbung(user)
return
question = questions[current_question]
embed = discord.Embed(title=f"❓ Frage {current_question + 1}", description=question, color=0x3498db)
embed.set_footer(text="Beantworte die Frage, indem du auf den Button klickst.")
view = AnswerView(self, user.id, position)
await user.send(embed=embed, view=view)
print(f"Frage {current_question + 1} an Benutzer {user.id} für Position {position} gesendet")
except Exception as e:
print(f"Fehler beim Senden der nächsten Frage: {str(e)}")
await user.send(f"Es ist ein Fehler aufgetreten. Bitte kontaktiere einen Administrator." - {str(e)})
def get_questions(self, position: str):
questions = {
"Moderation Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen als Supporter? Wenn ja, welche?",
"Wenn du angenommen werden würdest, wie viel Zeit würdest du im Server verbringen? (wöchentlich in Stundenanzahl)",
"Kennst du dich mit Discord Bots aus?",
"Was erwartest du von uns?",
"Was sollen wir von dir erwarten?",
"Wirst du dir unsere Systeme anschauen und entscheiden, diese kennenzulernen?",
"Warum hast du dich dazu entschieden, bei uns zu bewerben?",
"Stell dir mal vor, jemand würde versuchen, das Auto Moderationssystem **bewusst** auszunutzen, was würdest du machen?",
"Sagen wir mal, du wärst in einer Situation, wo dir jemand eine Frage stellt und du nicht weißt, wie du sie beantworten sollst. Wie würdest du sowas handhaben?",
"Was sind deine Stärken und Schwächen?",
"Wenn du angenommen werden würdest, wie würdest du dich in ein paar Monaten bei uns im Team sehen?",
"Letzte Frage, wie hoch willst du im Team werden? Würdest du dich schon im High Team sehen?"
],
"Guide Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen als Guide gemacht? Wenn ja, welche?",
"Wie viel Zeit würdest du als Guide bei uns auf dem Server verbringen? (wöchentlich in Stundenanzahl)",
"Kennst du dich mit Discord Bots aus?",
"Was können wir von dir erwarten?",
"Was erwartest du von uns?",
"Bist du damit einverstanden, dass du die Zeit investierst, unsere Systeme anzuschauen?",
"Warum hast du dich dazu entschieden, dich bei uns als Guide zu bewerben?",
"Stell dir mal vor, ein Anfänger würde im Chat schreiben, dass er nach Hilfe sucht. Was würdest du als Guide machen?",
"Stell dir mal vor, dass du eine Person guidest und diese fragt, wie man sich korrekt in Phasmophobia während einer Jagd verstecken kann. Wie würdest du der Person erklären?",
"Was sind deine Stärken und Schwächen?",
"Wenn du angenommen werden würdest, wie würdest du dich in ein paar Monaten bei uns im Team sehen?",
"Letzte Frage, wie hoch willst du im Guide Team werden? Würdest du dich schon im Guide Lead Team sehen?"
],
"Event Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen gesammelt in einem Team, wo du Events gemacht hast? Wenn ja, erläutere.",
"Wie viele Events würdest du innerhalb eines Monats zusammenstellen und dann auch hosten?",
"Kennst du dich mit Discord Bots aus?",
"Was können wir von dir erwarten?",
"Was erwartest du von uns?",
"Bist du damit einverstanden, dass du die Zeit investierst, unsere Systeme anzuschauen?",
"Warum hast du dich dazu entschieden, dich bei uns als Event Teammitglied zu bewerben?",
"Wie würdest du deine Events gestalten?",
"Was wäre dir wichtig bei deinen Events?",
"Was sind deine Stärken und Schwächen?",
"Wenn du angenommen werden würdest, wie würdest du dich in ein paar Monaten bei uns im Team sehen?",
"Letzte Frage, wie hoch willst du im Event Team werden? Würdest du dich schon im Event Lead Team sehen?"
]
}
return questions[position]
async def save_answer(self, user_id: int, answer: str):
try:
logging.debug(f"Speichere Antwort für Benutzer {user_id}")
self.cursor.execute("SELECT current_question, answers FROM bewerbungen WHERE user_id = ?", (user_id,))
current_question, answers = self.cursor.fetchone()
logging.debug(f"Datenbankabfrage Ergebnis: {answer}")
answers_list = answers.split("|||") if answers else []
answers_list.append(answer)
new_answers = "|||".join(answers_list)
self.cursor.execute("UPDATE bewerbungen SET current_question = ?, answers = ? WHERE user_id = ?",
(current_question + 1, new_answers, user_id))
self.conn.commit()
logging.debug(f"Antwort für Benutzer {user_id} gespeichert, Frage {current_question + 1}")
except Exception as e:
print(f"Keine Bewerbung gefunden für Benutzer {user_id} - {e}")
raise
async def finish_bewerbung(self, user: discord.User):
try:
self.cursor.execute("SELECT position, answers FROM bewerbungen WHERE user_id = ?", (user.id,))
position, answers = self.cursor.fetchone()
channel = self.bot.get_channel(1260681512626684045)
answers_list = answers.split("|||")
questions = self.get_questions(position)
embeds = []
current_embed = discord.Embed(title=f"📨 Bewerbung für {position}", description=f"Bewerber: {user.mention}", color=0x3498db)
for i, (question, answer) in enumerate(zip(questions, answers_list)):
field_content = f"**Frage:** {question}\n**Antwort:** {answer}"
if len(current_embed) + len(field_content) > 6000:
embeds.append(current_embed)
current_embed = discord.Embed(title=f"📨 Bewerbung für {position} (Fortsetzung)", description=f"Bewerber: {user.mention}", color=0x3498db)
current_embed.add_field(name=f"Frage {i+1}", value=field_content, inline=False)
embeds.append(current_embed)
view = BewertungView(self, user.id)
first_message = None
message_ids = []
for embed in embeds:
msg = await channel.send(embed=embed)
message_ids.append(str(msg.id))
if first_message is None:
first_message = msg
await first_message.edit(view=view)
self.cursor.execute("UPDATE bewerbungen SET status = 'completed', review_message_ids = ? WHERE user_id = ?",
(",".join(message_ids), user.id))
self.conn.commit()
self.bot.add_view(view, message_id=first_message.id)
await user.send("✅ Vielen Dank für deine Bewerbung! Sie wurde erfolgreich eingereicht und wird nun von unserem Team geprüft.")
print(f"Bewerbung für Benutzer {user.id} abgeschlossen und zur Überprüfung gesendet")
except Exception as e:
print(f"Fehler beim Abschließen der Bewerbung: {str(e)}")
await user.send("Es ist ein Fehler aufgetreten. Bitte kontaktiere einen Administrator.")
async def accept_bewerbung(self, user_id: int, interaction: discord.Interaction):
try:
user = await self.bot.fetch_user(user_id)
await user.send("🎉 Herzlichen Glückwunsch! Deine Bewerbung wurde angenommen. Wir werden dich bald für ein Bewerbungsgespräch kontaktieren.")
print(f"Bewerbung für Benutzer {user_id} angenommen")
message = interaction.message
embed = message.embeds[0]
embed.color = 0x2ecc71
embed.title = f"{embed.title} ✅ Angenommen"
await message.edit(embed=embed, view=None)
await interaction.response.send_message("Die Bewerbung wurde angenommen.", ephemeral=True)
self.cursor.execute("DELETE FROM bewerbungen WHERE user_id = ?", (user_id,))
self.conn.commit()
except Exception as e:
print(f"Fehler beim Annehmen der Bewerbung: {str(e)}")
await interaction.response.send_message("Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ephemeral=True)
async def reject_bewerbung(self, user_id: int, reason: str, interaction: discord.Interaction):
try:
user = await self.bot.fetch_user(user_id)
await user.send(f"❌ Es tut uns leid, aber deine Bewerbung wurde abgelehnt. Grund: {reason}")
print(f"Bewerbung für Benutzer {user_id} abgelehnt. Grund: {reason}")
message = interaction.message
embed = message.embeds[0]
embed.color = 0xe74c3c
embed.title = f"{embed.title} ❌ Abgelehnt"
embed.add_field(name="❗ Grund für die Ablehnung", value=reason, inline=False)
await message.edit(embed=embed, view=None)
await interaction.response.send_message("Die Bewerbung wurde abgelehnt und der Bewerber wurde informiert.", ephemeral=True)
self.cursor.execute("DELETE FROM bewerbungen WHERE user_id = ?", (user_id,))
self.conn.commit()
except Exception as e:
print(f"Fehler beim Ablehnen der Bewerbung: {str(e)}")
await interaction.response.send_message("Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ephemeral=True)
class AnswerModal(discord.ui.Modal):
def __init__(self, cog, user_id: int, position: str, message_id: int):
logging.debug(f"AnswerModal initialisiert für Benutzer {user_id}, Position {position}")
super().__init__(title="✍️ Beantworte die Frage")
self.cog = cog
self.user_id = user_id
self.position = position
self.message_id = message_id
self.answer_input = discord.ui.InputText(label="Deine Antwort", style=discord.InputTextStyle.paragraph, custom_id="answer_input")
self.add_item(self.answer_input)
async def callback(self, interaction: discord.Interaction):
logging.debug(f"callback aufgerufen für Benutzer {self.user_id}")
try:
logging.debug(f"Antwort erhalten von Benutzer {self.user_id} für Position {self.position}")
await self.cog.save_answer(self.user_id, self.answer_input.value)
try:
message = await interaction.channel.fetch_message(self.message_id)
await message.delete()
except discord.NotFound:
logging.warning(f"Nachricht mit ID {self.message_id} nicht gefunden, konnte nicht gelöscht werden.")
except Exception as e:
print(f"Fehler beim Löschen der Nachricht mit ID {self.message_id}: {str(e)}")
await interaction.response.send_message("✅ Deine Antwort wurde gespeichert. Die nächste Frage folgt gleich.", ephemeral=True)
await self.cog.send_next_question(interaction.user, self.position)
except Exception as e:
print(f"Fehler beim Verarbeiten der Antwort: {str(e)}")
await interaction.response.send_message("Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ephemeral=True)
class BewertungView(PersistentView):
def __init__(self, cog, user_id: int):
super().__init__()
self.cog = cog
self.user_id = user_id
@discord.ui.button(label="Angenommen", style=discord.ButtonStyle.success, custom_id="accept_button")
async def accept(self, button: discord.ui.Button, interaction: discord.Interaction):
try:
await self.cog.accept_bewerbung(self.user_id, interaction)
self.stop()
except Exception as e:
print(f"Fehler beim Annehmen der Bewerbung: {str(e)}")
await interaction.response.send_message("Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ephemeral=True)
@discord.ui.button(label="Abgelehnt", style=discord.ButtonStyle.danger, custom_id="reject_button")
async def reject(self, button: discord.ui.Button, interaction: discord.Interaction):
try:
modal = RejectModal(self.cog, self.user_id)
await interaction.response.send_modal(modal)
self.stop()
except Exception as e:
print(f"Fehler beim Öffnen des Ablehnungs-Modals: {str(e)}")
await interaction.response.send_message("Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ephemeral=True)
class RejectModal(discord.ui.Modal):
def __init__(self, cog, user_id: int):
super().__init__(title="🛑 Bewerbung ablehnen")
self.cog = cog
self.user_id = user_id
self.reason_input = discord.ui.InputText(label="Ablehnungsgrund", style=discord.InputTextStyle.paragraph, custom_id="reject_reason")
self.add_item(self.reason_input)
async def callback(self, interaction: discord.Interaction):
try:
await self.cog.reject_bewerbung(self.user_id, self.reason_input.value, interaction)
except Exception as e:
print(f"Fehler beim Ablehnen der Bewerbung: {str(e)}")
await interaction.response.send_message("Es ist ein Fehler aufgetreten. Bitte versuche es später erneut.", ephemeral=True)
def setup(bot):
bot.add_cog(Bewerbung(bot))
Pflege hier ein Social Media Team ein also in den Bewerbungen. Auch die 15 Fragen. Bitte mache den Code auch etwas improvesieren und verbessere ihn ein wenig. Alles in pycord 2.6. Keine Gedanken, keine Kommentare, einfach machen. Stelle sicher, dass es auch fehlerfrei ist.ASSISTANT
```python
import discord
from discord.ext import commands
import sqlite3
from datetime import datetime
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
class PersistentView(discord.ui.View):
def __init__(self):
super().__init__(timeout=None)
class BewerbungView(PersistentView):
def __init__(self, cog):
super().__init__()
self.cog = cog
@discord.ui.select(
placeholder="Wähle eine Position",
custom_id="position_select",
options=[
discord.SelectOption(label="🛡️ Moderation Team", value="Moderation Team"),
discord.SelectOption(label="📖 Guide Team", value="Guide Team"),
discord.SelectOption(label="📅 Event Team", value="Event Team"),
discord.SelectOption(label="📱 Social Media Team", value="Social Media Team"),
]
)
async def select_position(self, select: discord.ui.Select, interaction: discord.Interaction):
await self.cog.start_bewerbung(interaction, select.values[0])
class AnswerView(PersistentView):
def __init__(self, cog, user_id: int, position: str):
super().__init__()
self.cog = cog
self.user_id = user_id
self.position = position
@discord.ui.button(label="Beantworten", style=discord.ButtonStyle.primary, custom_id="answer_button")
async def answer(self, button: discord.ui.Button, interaction: discord.Interaction):
message_id = interaction.message.id
modal = AnswerModal(self.cog, self.user_id, self.position, message_id)
await interaction.response.send_modal(modal)
class Bewerbung(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.conn = sqlite3.connect('./database/bewerbungen.db')
self.cursor = self.conn.cursor()
self.create_table()
def create_table(self):
self.cursor.execute('''CREATE TABLE IF NOT EXISTS bewerbungen
(user_id INTEGER PRIMARY KEY,
position TEXT,
status TEXT,
current_question INTEGER,
answers TEXT,
timestamp DATETIME,
review_message_ids TEXT)''')
self.conn.commit()
@commands.Cog.listener()
async def on_ready(self):
self.bot.add_view(BewerbungView(self))
logging.info("Bewerbungs-Cog ist bereit")
self.cursor.execute("SELECT user_id, review_message_ids FROM bewerbungen WHERE status = 'completed'")
rows = self.cursor.fetchall()
for user_id, review_message_ids in rows:
if review_message_ids:
message_ids = review_message_ids.split(",")
for message_id in message_ids:
try:
channel = self.bot.get_channel(1268575457398362208)
message = await channel.fetch_message(int(message_id))
view = BewertungView(self, int(user_id))
self.bot.add_view(view, message_id=message.id)
except Exception as e:
logging.error(f"Fehler beim Hinzufügen der View für Nachricht {message_id}: {e}")
@commands.command()
@commands.has_permissions(administrator=True)
async def setup_bewerbung(self, ctx):
embed = discord.Embed(title="📋 Bewerbungen", description="Wähle eine Position aus, für die du dich bewerben möchtest.", color=0x3498db)
view = BewerbungView(self)
await ctx.send(embed=embed, view=view)
logging.info(f"Bewerbungs-Setup wurde von {ctx.author} durchgeführt")
async def start_bewerbung(self, interaction: discord.Interaction, position: str):
user_id = interaction.user.id
self.cursor.execute("SELECT * FROM bewerbungen WHERE user_id = ? AND status = 'in_progress'", (user_id,))
if self.cursor.fetchone():
await interaction.response.send_message("Du hast bereits eine laufende Bewerbung. Bitte warte, bis diese abgeschlossen ist.", ephemeral=True)
return
self.cursor.execute("INSERT INTO bewerbungen (user_id, position, status, current_question, answers, timestamp) VALUES (?, ?, ?, ?, ?, ?)",
(user_id, position, "in_progress", 0, "", datetime.now()))
self.conn.commit()
await interaction.response.send_message(f"Deine Bewerbung für das **{position}** wurde gestartet. Du erhältst gleich eine DM mit den Fragen.", ephemeral=True)
await self.send_next_question(interaction.user, position)
logging.info(f"Bewerbung für {position} von Benutzer {user_id} gestartet")
async def send_next_question(self, user: discord.User, position: str):
self.cursor.execute("SELECT current_question FROM bewerbungen WHERE user_id = ?", (user.id,))
current_question = self.cursor.fetchone()[0]
questions = self.get_questions(position)
if current_question >= len(questions):
await self.finish_bewerbung(user)
return
question = questions[current_question]
embed = discord.Embed(title=f"❓ Frage {current_question + 1}", description=question, color=0x3498db)
embed.set_footer(text="Beantworte die Frage, indem du auf den Button klickst.")
view = AnswerView(self, user.id, position)
await user.send(embed=embed, view=view)
logging.info(f"Frage {current_question + 1} an Benutzer {user.id} für Position {position} gesendet")
def get_questions(self, position: str):
questions = {
"Moderation Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen als Supporter? Wenn ja, welche?",
"Wenn du angenommen werden würdest, wie viel Zeit würdest du im Server verbringen? (wöchentlich in Stundenanzahl)",
"Kennst du dich mit Discord Bots aus?",
"Was erwartest du von uns?",
"Was sollen wir von dir erwarten?",
"Wirst du dir unsere Systeme anschauen und entscheiden, diese kennenzulernen?",
"Warum hast du dich dazu entschieden, bei uns zu bewerben?",
"Stell dir mal vor, jemand würde versuchen, das Auto Moderationssystem **bewusst** auszunutzen, was würdest du machen?",
"Sagen wir mal, du wärst in einer Situation, wo dir jemand eine Frage stellt und du nicht weißt, wie du sie beantworten sollst. Wie würdest du sowas handhaben?",
"Was sind deine Stärken und Schwächen?",
"Wenn du angenommen werden würdest, wie würdest du dich in ein paar Monaten bei uns im Team sehen?",
"Letzte Frage, wie hoch willst du im Team werden? Würdest du dich schon im High Team sehen?"
],
"Guide Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen als Guide gemacht? Wenn ja, welche?",
"Wie viel Zeit würdest du als Guide bei uns auf dem Server verbringen? (wöchentlich in Stundenanzahl)",
"Kennst du dich mit Discord Bots aus?",
"Was können wir von dir erwarten?",
"Was erwartest du von uns?",
"Bist du damit einverstanden, dass du die Zeit investierst, unsere Systeme anzuschauen?",
"Warum hast du dich dazu entschieden, dich bei uns als Guide zu bewerben?",
"Stell dir mal vor, ein Anfänger würde im Chat schreiben, dass er nach Hilfe sucht. Was würdest du als Guide machen?",
"Stell dir mal vor, dass du eine Person guidest und diese fragt, wie man sich korrekt in Phasmophobia während einer Jagd verstecken kann. Wie würdest du der Person erklären?",
"Was sind deine Stärken und Schwächen?",
"Wenn du angenommen werden würdest, wie würdest du dich in ein paar Monaten bei uns im Team sehen?",
"Letzte Frage, wie hoch willst du im Guide Team werden? Würdest du dich schon im Guide Lead Team sehen?"
],
"Event Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen gesammelt in einem Team, wo du Events gemacht hast? Wenn ja, erläutere.",
"Wie viele Events würdest du innerhalb eines Monats zusammenstellen und dann auch hosten?",
"Kennst du dich mit Discord Bots aus?",
"Was können wir von dir erwarten?",
"Was erwartest du von uns?",
"Bist du damit einverstanden, dass du die Zeit investierst, unsere Systeme anzuschauen?",
"Warum hast du dich dazu entschieden, dich bei uns als Event Teammitglied zu bewerben?",
"Wie würdest du deine Events gestalten?",
"Was wäre dir wichtig bei deinen Events?",
"Was sind deine Stärken und Schwächen?",
"Wenn du angenommen werden würdest, wie würdest du dich in ein paar Monaten bei uns im Team sehen?",
"Letzte Frage, wie hoch willst du im Event Team werden? Würdest du dich schon im Event Lead Team sehen?"
],
"Social Media Team": [
"Wie heißt du?",
"Wie alt bist du?",
"Was machst du in deiner Freizeit?",
"Hast du bereits Erfahrungen im Social Media Management? Wenn ja, welche?",
"Welche Social Media Plattformen beherrschst du am besten und warum?",
"Wie planst du Inhalte für verschiedene Plattformen?",
"Wie gehst du mit negativen Kommentaren oder Feedback um?",
"Welche Tools nutzt du für das Social Media Management?",
"Wie misst du den Erfolg deiner Social Media Kampagnen?",
"Hast du Erfahrung im Erstellen von Grafiken oder Videos für Social Media?",
"Wie bleibst du über aktuelle Trends und Änderungen in den Social Media Plattformen informiert?",
"Wie koordinierst du dich mit anderen Teams für gemeinsame Projekte oder Kampagnen?",
"Was erwartest du von unserem Team?",
"Warum möchtest du Teil des Social Media Teams werden?",
"Wie planst du deine Arbeitszeit, um regelmäßige und konsistente Beiträge zu gewährleisten?"
]
}
return questions[position]
async def save_answer(self, user_id: int, answer: str):
self.cursor.execute("SELECT current_question, answers FROM bewerbungen WHERE user_id = ?", (user_id,))
result = self.cursor.fetchone()
if not result:
raise ValueError("Keine Bewerbung gefunden.")
current_question, answers = result
answers_list = answers.split("|||") if answers else []
answers_list.append(answer)
new_answers = "|||".join(answers_list)
self.cursor.execute("UPDATE bewerbungen SET current_question = ?, answers = ? WHERE user_id = ?",
(current_question + 1, new_answers, user_id))
self.conn.commit()
async def finish_bewerbung(self, user: discord.User):
self.cursor.execute("SELECT position, answers FROM bewerbungen WHERE user_id = ?", (user.id,))
result = self.cursor.fetchone()
if not result:
return
position, answers = result
channel = self.bot.get_channel(1260681512626684045)
answers_list = answers.split("|||")
questions = self.get_questions(position)
embeds = []
current_embed = discord.Embed(title=f"📨 Bewerbung für {position}", description=f"Bewerber: {user.mention}", color=0x3498db)
for i, (question, answer) in enumerate(zip(questions, answers_list)):
field_content = f"**Frage:** {question}\n**Antwort:** {answer}"
if len(current_embed) + len(field_content) > 6000:
embeds.append(current_embed)
current_embed = discord.Embed(title=f"📨 Bewerbung für {position} (Fortsetzung)", description=f"Bewerber: {user.mention}", color=0x3498db)
current_embed.add_field(name=f"Frage {i+1}", value=field_content, inline=False)
embeds.append(current_embed)
view = BewertungView(self, user.id)
message_ids = []
for embed in embeds:
msg = await channel.send(embed=embed)
message_ids.append(str(msg.id))
if not message_ids:
first_message = msg
first_message = await channel.send(embed=embeds[0], view=view)
message_ids.append(str(first_message.id))
self.cursor.execute("UPDATE bewerbungen SET status = 'completed', review_message_ids = ? WHERE user_id = ?",
(",".join(message_ids), user.id))
self.conn.commit()
self.bot.add_view(view, message_id=first_message.id)
await user.send("✅ Vielen Dank für deine Bewerbung! Sie wurde erfolgreich eingereicht und wird nun von unserem Team geprüft.")
logging.info(f"Bewerbung für Benutzer {user.id} abgeschlossen und zur Überprüfung gesendet")
async def accept_bewerbung(self, user_id: int, interaction: discord.Interaction):
user = await self.bot.fetch_user(user_id)
await user.send("🎉 Herzlichen Glückwunsch! Deine Bewerbung wurde angenommen. Wir werden dich bald für ein Bewerbungsgespräch kontaktieren.")
embed = interaction.message.embeds[0]
embed.color = 0x2ecc71
embed.title = f"{embed.title} ✅ Angenommen"
await interaction.message.edit(embed=embed, view=None)
await interaction.response.send_message("Die Bewerbung wurde angenommen.", ephemeral=True)
self.cursor.execute("DELETE FROM bewerbungen WHERE user_id = ?", (user_id,))
self.conn.commit()
logging.info(f"Bewerbung für Benutzer {user_id} angenommen")
async def reject_bewerbung(self, user_id: int, reason: str, interaction: discord.Interaction):
user = await self.bot.fetch_user(user_id)
await user.send(f"❌ Es tut uns leid, aber deine Bewerbung wurde abgelehnt. Grund: {reason}")
embed = interaction.message.embeds[0]
embed.color = 0xe74c3c
embed.title = f"{embed.title} ❌ Abgelehnt"
embed.add_field(name="❗ Grund für die Ablehnung", value=reason, inline=False)
await interaction.message.edit(embed=embed, view=None)
await interaction.response.send_message("Die Bewerbung wurde abgelehnt und der Bewerber wurde informiert.", ephemeral=True)
self.cursor.execute("DELETE FROM bewerbungen WHERE user_id = ?", (user_id,))
self.conn.commit()
logging.info(f"Bewerbung für Benutzer {user_id} abgelehnt. Grund: {reason}")
class AnswerModal(discord.ui.Modal):
def __init__(self, cog, user_id: int, position: str, message_id: int):
super().__init__(title="✍️ Beantworte die Frage")
self.cog = cog
self.user_id = user_id
self.position = position
self.message_id = message_id
self.answer_input = discord.ui.InputText(label="Deine Antwort", style=discord.InputTextStyle.paragraph, custom_id="answer_input")
self.add_item(self.answer_input)
async def callback(self, interaction: discord.Interaction):
await self.cog.save_answer(self.user_id, self.answer_input.value)
try:
message = await interaction.channel.fetch_message(self.message_id)
await message.delete()
except discord.NotFound:
pass
await interaction.response.send_message("✅ Deine Antwort wurde gespeichert. Die nächste Frage folgt gleich.", ephemeral=True)
await self.cog.send_next_question(interaction.user, self.position)
class BewertungView(PersistentView):
def __init__(self, cog, user_id: int):
super().__init__()
self.cog = cog
self.user_id = user_id
@discord.ui.button(label="Angenommen", style=discord.ButtonStyle.success, custom_id="accept_button")
async def accept(self, button: discord.ui.Button, interaction: discord.Interaction):
await self.cog.accept_bewerbung(self.user_id, interaction)
@discord.ui.button(label="Abgelehnt", style=discord.ButtonStyle.danger, custom_id="reject_button")
async def reject(self, button: discord.ui.Button, interaction: discord.Interaction):
modal = RejectModal(self.cog, self.user_id)
await interaction.response.send_modal(modal)
class RejectModal(discord.ui.Modal):
def __init__(self, cog, user_id: int):
super().__init__(title="🛑 Bewerbung ablehnen")
self.cog = cog
self.user_id = user_id
self.reason_input = discord.ui.InputText(label="Ablehnungsgrund", style=discord.InputTextStyle.paragraph, custom_id="reject_reason")
self.add_item(self.reason_input)
async def callback(self, interaction: discord.Interaction):
await self.cog.reject_bewerbung(self.user_id, self.reason_input.value, interaction)
def setup(bot):
bot.add_cog(Bewerbung(bot))
```