Merge branch 'main' of https://git.jmueller.eu/jmueller/1.Fjg-Rekrubot
# Conflicts: # main.py
This commit is contained in:
10
.idea/1.Fjg-Rekrubot.iml
generated
Normal file
10
.idea/1.Fjg-Rekrubot.iml
generated
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.11 (venv)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
181
main.py
181
main.py
@@ -36,7 +36,6 @@ intents.members = True
|
|||||||
bot = discord.Bot(intents = intents)
|
bot = discord.Bot(intents = intents)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_ready():
|
async def on_ready():
|
||||||
global Yes_select_inst25
|
global Yes_select_inst25
|
||||||
@@ -73,11 +72,13 @@ def build_option_list(part=1):
|
|||||||
cur.execute("SELECT discord_id, nickname, recruit FROM recruits WHERE recruit=1")
|
cur.execute("SELECT discord_id, nickname, recruit FROM recruits WHERE recruit=1")
|
||||||
options = []
|
options = []
|
||||||
records = cur.fetchall()
|
records = cur.fetchall()
|
||||||
count = get_count_recruits()
|
count = get_count_recruits(1)
|
||||||
if count < 25:
|
counter = 0
|
||||||
|
if count <= 25:
|
||||||
for row in records:
|
for row in records:
|
||||||
options.append(discord.SelectOption(value=str(row[0]), label=str(row[1])))
|
options.append(discord.SelectOption(value=str(row[0]), label=str(row[1])))
|
||||||
return options
|
counter = counter + 1
|
||||||
|
return options, counter
|
||||||
else:
|
else:
|
||||||
i = 0
|
i = 0
|
||||||
for row in records:
|
for row in records:
|
||||||
@@ -90,7 +91,8 @@ def build_option_list(part=1):
|
|||||||
continue
|
continue
|
||||||
options.append(discord.SelectOption(value=str(row[0]), label=str(row[1])))
|
options.append(discord.SelectOption(value=str(row[0]), label=str(row[1])))
|
||||||
i = i + 1
|
i = i + 1
|
||||||
return options
|
counter = counter + 1
|
||||||
|
return options, counter
|
||||||
|
|
||||||
|
|
||||||
def insert_yes_vote(recruit_id, voter_id):
|
def insert_yes_vote(recruit_id, voter_id):
|
||||||
@@ -166,7 +168,7 @@ class Yes_select_25(discord.ui.View):
|
|||||||
placeholder="Rekruten wählen...",
|
placeholder="Rekruten wählen...",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=get_count_recruits(),
|
max_values=get_count_recruits(),
|
||||||
options=build_option_list()
|
options=build_option_list()[0]
|
||||||
)
|
)
|
||||||
|
|
||||||
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
||||||
@@ -179,20 +181,22 @@ class Yes_select_50(discord.ui.View):
|
|||||||
custom_id="yes50_1",
|
custom_id="yes50_1",
|
||||||
placeholder="Rekruten wählen...",
|
placeholder="Rekruten wählen...",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=get_count_recruits(),
|
max_values=build_option_list(1)[1],
|
||||||
options=build_option_list(1)
|
options=build_option_list(1)[0],
|
||||||
|
row=1
|
||||||
)
|
)
|
||||||
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
async def yes_1_callback(self, select, interaction): # the function called when the user is done selecting options
|
||||||
await process_yes_vote(select, interaction)
|
await process_yes_vote(select, interaction)
|
||||||
|
|
||||||
@discord.ui.select(
|
@discord.ui.select(
|
||||||
custom_id="yes50_2",
|
custom_id="yes50_2",
|
||||||
placeholder="Rekruten wählen...",
|
placeholder="Rekruten wählen...",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=get_count_recruits(),
|
max_values=build_option_list(2)[1],
|
||||||
options=build_option_list(2)
|
options=build_option_list(2)[0],
|
||||||
|
row=2
|
||||||
)
|
)
|
||||||
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
async def yes_2_callback(self, select, interaction): # the function called when the user is done selecting options
|
||||||
await process_yes_vote(select, interaction)
|
await process_yes_vote(select, interaction)
|
||||||
|
|
||||||
def create_yes_embed():
|
def create_yes_embed():
|
||||||
@@ -219,15 +223,18 @@ async def edit_yes_message():
|
|||||||
conn.commit()
|
conn.commit()
|
||||||
if get_count_recruits(1) <= 25:
|
if get_count_recruits(1) <= 25:
|
||||||
global Yes_select_inst25
|
global Yes_select_inst25
|
||||||
Yes_select_inst25.children[0].options = build_option_list()
|
optiontuple = build_option_list()
|
||||||
Yes_select_inst25.children[0].max_values = get_count_recruits()
|
Yes_select_inst25.children[0].options = optiontuple[0]
|
||||||
|
Yes_select_inst25.children[0].max_values = optiontuple[1]
|
||||||
await message.edit(embed=create_yes_embed(), view=Yes_select_inst25)
|
await message.edit(embed=create_yes_embed(), view=Yes_select_inst25)
|
||||||
else:
|
else:
|
||||||
global Yes_select_inst50
|
global Yes_select_inst50
|
||||||
Yes_select_inst50.children[0].options = build_option_list()
|
optiontuple1 = build_option_list()
|
||||||
Yes_select_inst50.children[1].options = build_option_list(2)
|
optiontuple2 = build_option_list(2)
|
||||||
Yes_select_inst50.children[0].max_values = get_count_recruits()
|
Yes_select_inst50.children[0].options = optiontuple1[0]
|
||||||
Yes_select_inst50.children[1].max_values = get_count_recruits()
|
Yes_select_inst50.children[1].options = optiontuple2[0]
|
||||||
|
Yes_select_inst50.children[0].max_values = optiontuple1[1]
|
||||||
|
Yes_select_inst50.children[1].max_values = optiontuple2[1]
|
||||||
await message.edit(embed=create_yes_embed(), view=Yes_select_inst50)
|
await message.edit(embed=create_yes_embed(), view=Yes_select_inst50)
|
||||||
|
|
||||||
|
|
||||||
@@ -346,7 +353,7 @@ class No_select25(discord.ui.View):
|
|||||||
placeholder="Rekruten wählen...",
|
placeholder="Rekruten wählen...",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=1,
|
max_values=1,
|
||||||
options=build_option_list()
|
options=build_option_list()[0]
|
||||||
)
|
)
|
||||||
|
|
||||||
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
||||||
@@ -360,22 +367,23 @@ class No_select50(discord.ui.View):
|
|||||||
placeholder="Rekruten wählen...",
|
placeholder="Rekruten wählen...",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=1,
|
max_values=1,
|
||||||
options=build_option_list()
|
options=build_option_list()[0],
|
||||||
|
row=1
|
||||||
)
|
)
|
||||||
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
async def no_callback1(self, select, interaction): # the function called when the user is done selecting options
|
||||||
await process_no_vote(interaction, select)
|
await process_no_vote(interaction, select)
|
||||||
@discord.ui.select(
|
@discord.ui.select(
|
||||||
custom_id="no50_2",
|
custom_id="no50_2",
|
||||||
placeholder="Rekruten wählen...",
|
placeholder="Rekruten wählen...",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=1,
|
max_values=1,
|
||||||
options=build_option_list(2)
|
options=build_option_list(2)[0],
|
||||||
|
row=2
|
||||||
)
|
)
|
||||||
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
async def no_callback2(self, select, interaction): # the function called when the user is done selecting options
|
||||||
await process_no_vote(interaction, select)
|
await process_no_vote(interaction, select)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def create_no_embed():
|
def create_no_embed():
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Rekrutenbesichtigung: Nein-Stimme",
|
title="Rekrutenbesichtigung: Nein-Stimme",
|
||||||
@@ -402,12 +410,12 @@ async def edit_no_message():
|
|||||||
conn.commit()
|
conn.commit()
|
||||||
if get_count_recruits(1) <= 25:
|
if get_count_recruits(1) <= 25:
|
||||||
global no_select_inst25
|
global no_select_inst25
|
||||||
no_select_inst25.children[0].options = build_option_list()
|
no_select_inst25.children[0].options = build_option_list()[0]
|
||||||
await message.edit(embed=create_no_embed(), view=no_select_inst25)
|
await message.edit(embed=create_no_embed(), view=no_select_inst25)
|
||||||
else:
|
else:
|
||||||
global no_select_inst50
|
global no_select_inst50
|
||||||
no_select_inst50.children[0].options = build_option_list()
|
no_select_inst50.children[0].options = build_option_list()[0]
|
||||||
no_select_inst50.children[1].options = build_option_list()
|
no_select_inst50.children[1].options = build_option_list()[0]
|
||||||
await message.edit(embed=create_no_embed(), view=no_select_inst50)
|
await message.edit(embed=create_no_embed(), view=no_select_inst50)
|
||||||
|
|
||||||
class delete_and_view_votes_message(discord.ui.View):
|
class delete_and_view_votes_message(discord.ui.View):
|
||||||
@@ -442,7 +450,114 @@ class delete_and_view_votes_message(discord.ui.View):
|
|||||||
|
|
||||||
@discord.ui.button(label="Stimme auswählen und löschen", custom_id="delete-votes", style=discord.ButtonStyle.secondary)
|
@discord.ui.button(label="Stimme auswählen und löschen", custom_id="delete-votes", style=discord.ButtonStyle.secondary)
|
||||||
async def delete_votes(self, button, interaction):
|
async def delete_votes(self, button, interaction):
|
||||||
print("No")
|
embed = discord.Embed(
|
||||||
|
title="Stimme löschen",
|
||||||
|
description="Wähle einen Rekruten aus, um deine Stimme für ihn zu löschen",
|
||||||
|
color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from
|
||||||
|
)
|
||||||
|
delete_recruit_vote_inst = delete_recruit_vote()
|
||||||
|
delete_recruit_vote_inst.children[0].options = getvotes(interaction.user.id)
|
||||||
|
await interaction.response.send_message(embed=embed, view=delete_recruit_vote_inst, ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
|
def getvotes(voterid, part = 1):
|
||||||
|
cur.execute("SELECT count(*) FROM yes_votes WHERE discord_id_voter = ?", (voterid, ))
|
||||||
|
yes_vote_count = cur.fetchone()[0]
|
||||||
|
cur.execute("SELECT count(*) FROM no_votes WHERE discord_id_voter = ?", (voterid,))
|
||||||
|
no_vote_count = cur.fetchone()[0]
|
||||||
|
count = yes_vote_count + no_vote_count
|
||||||
|
cur.execute(
|
||||||
|
"SELECT recruits.discord_id, recruits.nickname FROM recruits, yes_votes WHERE recruits.discord_id = yes_votes.discord_id_recruit AND yes_votes.discord_id_voter = ? AND recruit = 1",
|
||||||
|
(voterid, ))
|
||||||
|
yes_votes = cur.fetchall()
|
||||||
|
option = []
|
||||||
|
new_option = []
|
||||||
|
if count <= 25:
|
||||||
|
for vote in yes_votes:
|
||||||
|
option.append(discord.SelectOption(value=str(vote[0]), label="Ja: " + str(vote[1])))
|
||||||
|
cur.execute(
|
||||||
|
"SELECT recruits.discord_id, recruits.nickname FROM recruits, no_votes WHERE recruits.discord_id = no_votes.discord_id_recruit AND no_votes.discord_id_voter = ? AND recruit = 1",
|
||||||
|
(voterid, ))
|
||||||
|
no_votes = cur.fetchall()
|
||||||
|
for vote in no_votes:
|
||||||
|
option.append(discord.SelectOption(value=str(vote[0]), label="Nein: " + str(vote[1])))
|
||||||
|
return option
|
||||||
|
else:
|
||||||
|
for vote in yes_votes:
|
||||||
|
option.append(discord.SelectOption(value=str(vote[0]), label="Ja: " + str(vote[1])))
|
||||||
|
cur.execute(
|
||||||
|
"SELECT recruits.discord_id, recruits.nickname FROM recruits, no_votes WHERE recruits.discord_id = no_votes.discord_id_recruit AND no_votes.discord_id_voter = ? AND recruit = 1",
|
||||||
|
(voterid, ))
|
||||||
|
no_votes = cur.fetchall()
|
||||||
|
for vote in no_votes:
|
||||||
|
option.append(discord.SelectOption(value=str(vote[0]), label="Nein: " + str(vote[1])))
|
||||||
|
if part == 1:
|
||||||
|
count = 0
|
||||||
|
for option_single in option:
|
||||||
|
if count > 25:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
new_option.append(option_single)
|
||||||
|
return new_option
|
||||||
|
else:
|
||||||
|
count = 0
|
||||||
|
for option_single in option:
|
||||||
|
if count <= 25:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
new_option.append(option_single)
|
||||||
|
return new_option
|
||||||
|
|
||||||
|
|
||||||
|
class delete_recruit_vote(discord.ui.View):
|
||||||
|
voterid = 0
|
||||||
|
@discord.ui.select(
|
||||||
|
placeholder = "Rekruten auswählen...",
|
||||||
|
min_values = 1,
|
||||||
|
max_values = 1, # the maximum number of values that can be selected by the users
|
||||||
|
options = []
|
||||||
|
)
|
||||||
|
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
||||||
|
confirm_deletion_of_vote_inst = confirm_deletion_of_vote()
|
||||||
|
confirm_deletion_of_vote.votes = select.values
|
||||||
|
description = "Du möchtest deine Stimme für folgenden Rekruten löschen:\n"
|
||||||
|
for choice in select.values:
|
||||||
|
cur.execute("SELECT nickname FROM recruits WHERE discord_id = ?", (choice, ))
|
||||||
|
nickname = cur.fetchone()[0]
|
||||||
|
description = description + nickname + "\n"
|
||||||
|
embed = discord.Embed(
|
||||||
|
title="Stimme löschen",
|
||||||
|
description=description,
|
||||||
|
color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from
|
||||||
|
)
|
||||||
|
await interaction.response.send_message(embed=embed, view=confirm_deletion_of_vote_inst, ephemeral=True)
|
||||||
|
await self.message.delete()
|
||||||
|
|
||||||
|
class confirm_deletion_of_vote(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View
|
||||||
|
votes = []
|
||||||
|
@discord.ui.button(label="Stimme löschen", style=discord.ButtonStyle.danger)
|
||||||
|
async def ja(self, button, interaction):
|
||||||
|
for vote in self.votes:
|
||||||
|
cur.execute("DELETE FROM yes_votes WHERE discord_id_voter = ? AND discord_id_recruit = ?", (interaction.user.id, vote))
|
||||||
|
cur.execute("DELETE FROM no_votes WHERE discord_id_voter = ? AND discord_id_recruit = ?", (interaction.user.id, vote))
|
||||||
|
conn.commit()
|
||||||
|
embed = discord.Embed(
|
||||||
|
title="Löschvorgang abgeschlossen",
|
||||||
|
description="Deine Stimmen wurden gelöscht. \nSollte das ein Fehler sein, stimme einfach erneut ab.",
|
||||||
|
color=discord.Colour.green(),
|
||||||
|
)
|
||||||
|
await interaction.response.send_message(embed=embed, ephemeral=True)
|
||||||
|
await self.message.delete()
|
||||||
|
|
||||||
|
@discord.ui.button(label="Abbrechen", style=discord.ButtonStyle.secondary)
|
||||||
|
async def nein(self, button, interaction):
|
||||||
|
embed = discord.Embed(
|
||||||
|
title="Löschvorgang abgebrochen",
|
||||||
|
description="Deine Stimmen wurden nicht modifiziert.",
|
||||||
|
color=discord.Colour.dark_red(),
|
||||||
|
)
|
||||||
|
await interaction.response.send_message(embed=embed, ephemeral=True)
|
||||||
|
await self.message.delete()
|
||||||
|
|
||||||
|
|
||||||
async def send_delete_message(channel):
|
async def send_delete_message(channel):
|
||||||
@@ -497,8 +612,8 @@ def check_roles(member, recruit_id):
|
|||||||
@settings.command(description="Aktualisiert die internen Daten.")
|
@settings.command(description="Aktualisiert die internen Daten.")
|
||||||
@default_permissions(manage_roles=True)
|
@default_permissions(manage_roles=True)
|
||||||
async def refresh(ctx):
|
async def refresh(ctx):
|
||||||
|
await ctx.respond(f"Refresh angestoßen! Dies dauert einen kleinen Moment.", ephemeral=True)
|
||||||
cur.execute("SELECT value FROM settings WHERE name='guild'")
|
cur.execute("SELECT value FROM settings WHERE name='guild'")
|
||||||
#conn.commit()
|
|
||||||
guild_id = cur.fetchone()
|
guild_id = cur.fetchone()
|
||||||
guild_id = guild_id[0]
|
guild_id = guild_id[0]
|
||||||
cur.execute("SELECT value FROM settings WHERE name='role_recruit'")
|
cur.execute("SELECT value FROM settings WHERE name='role_recruit'")
|
||||||
@@ -515,9 +630,15 @@ async def refresh(ctx):
|
|||||||
else:
|
else:
|
||||||
cur.execute("UPDATE recruits SET recruit = ?, nickname = ? WHERE discord_id = ?", (0, member.display_name, member.id))
|
cur.execute("UPDATE recruits SET recruit = ?, nickname = ? WHERE discord_id = ?", (0, member.display_name, member.id))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
cur.execute("SELECT discord_id FROM recruits WHERE recruit = 1")
|
||||||
|
recruits = cur.fetchall()
|
||||||
|
for recruit in recruits:
|
||||||
|
member = guild.get_member(recruit[0])
|
||||||
|
if member is None:
|
||||||
|
cur.execute("UPDATE recruits SET recruit = 0 WHERE discord_id = ?", (recruit[0], ))
|
||||||
|
conn.commit()
|
||||||
await edit_yes_message()
|
await edit_yes_message()
|
||||||
await edit_no_message()
|
await edit_no_message()
|
||||||
await ctx.respond(f"Done.", ephemeral=True)
|
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
|
|||||||
Reference in New Issue
Block a user