def grp_drop(): grpid = json.loads(request.args['grpid']) try: Group.delete(grpid) return jsonify(groups=Group.get_all()) except Exception as ex: return jsonify(error=str(ex))
async def groupphase(self, ctx, type: typing.Optional[str], groupamount: typing.Optional[int]): if type: type = type.lower() if type == 'start': # check if grouphase is already startet state_groupphase_isStarted = State.get('groupphase_isStarted') if (state_groupphase_isStarted and state_groupphase_isStarted.value == str(True)): # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Es läuft schon eine Gruppenphase! Beende erst die alte, bevor du eine neue startest.' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # check if guild_announcements_channel_id isset if self.guild_announcements_channel_id > 0: guild_announcements_channel = self.bot.get_channel( self.guild_announcements_channel_id) # check if channel was found if guild_announcements_channel: announcement_message = await guild_announcements_channel.send('Hallo @everyone,\neine neue Gruppenphase wurde gerade gestartet! Wenn du mitmachen willst, reagiere einfach mit einem :white_check_mark: auf diese Nachricht!') await announcement_message.add_reaction('✅') # start groupphase State.set('groupphase_isStarted', str(True)) State.set('groupphase_reaction_message', announcement_message.id) # create output embed embed = discord.Embed( colour=discord.Colour.green(), title=f'Die Gruppenphase wurde erfolgreich gestartet!' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Der Ankündigung-Kanal wurde nicht gefunden. Überprüfe in der `.env`-Datei den Parameter `GUILD_ANNOUNCEMENTS_CHANNEL`.' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Bitte setze in der `.env`-Datei den Parameter `GUILD_ANNOUNCEMENTS_CHANNEL`.' ) # send embed await ctx.send(ctx.author.mention, embed=embed) elif type == 'stop': # check if grouphase is startet state_groupphase_isStarted = State.get('groupphase_isStarted') if (state_groupphase_isStarted and state_groupphase_isStarted.value == str(True)): # delete all groups for group in Group.all(): try: await ctx.guild.get_role(group.role).delete() except Exception: pass try: await ctx.guild.get_channel(group.textChannel).delete() except Exception: pass try: await ctx.guild.get_channel(group.voiceChannel).delete() except Exception: pass Group.delete(group.id) # delete groupphase user Groupphaseuser.deleteall() # delete groupphase State.delete('groupphase_isStarted') State.delete('groupphase_reaction_message') # create output embed embed = discord.Embed( colour=discord.Colour.green(), title=f'Die Gruppenphase wurde erfolgreich beendet!' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Es läuft keine Gruppenphase, die du beenden könntest!' ) # send embed await ctx.send(ctx.author.mention, embed=embed) elif type in ['sort', 'inf', 'wi', 'et', 'mcd']: # check if grouphase is startet state_groupphase_isStarted = State.get('groupphase_isStarted') if (state_groupphase_isStarted and state_groupphase_isStarted.value == str(True)): # check if groupamount parameter isset if groupamount: if groupamount < 2: groupamount = 2 elif groupamount > 100: groupamount = 100 # create output embed embed = discord.Embed( colour=discord.Colour.blue(), title="Einteilung der Gruppenphase beginnt", ) if type == 'sort': members_total = len(Groupphaseuser.all()) embed.add_field(name='Teilnehmer', value=f'{members_total}', inline=False) elif type == 'inf': members_total = len(Groupphaseuser.inf()) embed.add_field(name='Teilnehmer (INF)', value=f'{members_total}', inline=False) elif type == 'wi': members_total = len(Groupphaseuser.wi()) embed.add_field(name='Teilnehmer (WI)', value=f'{members_total}', inline=False) elif type == 'et': members_total = len(Groupphaseuser.et()) embed.add_field(name='Teilnehmer (ET)', value=f'{members_total}', inline=False) elif type == 'mcd': members_total = len(Groupphaseuser.mcd()) embed.add_field(name='Teilnehmer (MCD)', value=f'{members_total}', inline=False) embed.add_field(name='Gruppenanzahl', value=f'{groupamount}', inline=False) embed.add_field(name='Max. Teilnehmer pro Gruppe', value=f'{math.ceil(members_total/groupamount)}', inline=False) # send message await ctx.send(ctx.author.mention, embed=embed) for x in range(groupamount): if type == 'sort': groupname = 'Gruppe ' + str((x) + 1) else: groupname = type.upper() + '-Gruppe ' + str((x) + 1) role = await ctx.guild.create_role(name=groupname, hoist=False) if self.guild_tutor_sup_role != None: overwrites = { ctx.guild.default_role: discord.PermissionOverwrite( view_channel=False, read_messages=False, connect=False, ), role: discord.PermissionOverwrite( view_channel=True, read_messages=True, connect=True, ), self.guild_tutor_sup_role: discord.PermissionOverwrite( view_channel=True, read_messages=True, connect=True, ), } else: overwrites = { ctx.guild.default_role: discord.PermissionOverwrite( view_channel=False, read_messages=False, connect=False, ), role: discord.PermissionOverwrite( view_channel=True, read_messages=True, connect=True, ) } voiceChannel = await ctx.guild.create_voice_channel(name=groupname, overwrites=overwrites) textChannel = await ctx.guild.create_text_channel(name=groupname, overwrites=overwrites) group = Group(groupname, role.id, voiceChannel.id, textChannel.id) if type == 'inf': group.course = "inf" elif type == 'wi': group.course = "wi" elif type == 'et': group.course = "et" elif type == 'mcd': group.course = "mcd" db_session.add(group) db_session.commit() # create output embed embed = discord.Embed( colour=discord.Colour.green(), title=f'Gruppen erfolgreich angelegt!' ) # send embed await ctx.send(ctx.author.mention, embed=embed) # create output embed embed = discord.Embed( colour=discord.Colour.blue(), title=f'Beginne mit der Einteilung der Teilnehmer.' ) # send embed await ctx.send(ctx.author.mention, embed=embed) if type == 'sort': groups = Group.all() allWithoutGroups = Groupphaseuser.allWithoutGroup() elif type == 'inf': groups = Group.inf() allWithoutGroups = Groupphaseuser.allWithoutGroupInf() elif type == 'wi': groups = Group.wi() allWithoutGroups = Groupphaseuser.allWithoutGroupWi() elif type == 'et': groups = Group.et() allWithoutGroups = Groupphaseuser.allWithoutGroupEt() elif type == 'mcd': groups = Group.mcd() allWithoutGroups = Groupphaseuser.allWithoutGroupMcd() else: return counter = 0 for user in allWithoutGroups: if counter >= groupamount: counter = 0 user.groupID = groups[counter].id userDiscord = ctx.guild.get_member(user.id) role = ctx.guild.get_role(groups[counter].role) await userDiscord.add_roles(role) counter += 1 db_session.commit() # create output embed embed = discord.Embed( colour=discord.Colour.green(), title=f'Teilnehmer erfolgreich eingeteilt!' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Bitte füge noch den Parameter `groupamount` hinzu.' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Es läuft keine Gruppenphase, die du einteilen könntest!' ) # send embed await ctx.send(ctx.author.mention, embed=embed) else: # check if grouphase is startet state_groupphase_isStarted = State.get('groupphase_isStarted') if (state_groupphase_isStarted and state_groupphase_isStarted.value == str(True)): # create output embed embed = discord.Embed( colour=discord.Colour.blue(), title="Informationen zur Gruppenphase", ) members_total = len(Groupphaseuser.all()) embed.add_field(name='Teilnehmer', value=f'{members_total}', inline=False) inf_total = len(Groupphaseuser.inf()) embed.add_field(name='INF', value=f'{inf_total}', inline=False) wi_total = len(Groupphaseuser.wi()) embed.add_field(name='WI', value=f'{wi_total}', inline=False) et_total = len(Groupphaseuser.et()) embed.add_field(name='ET', value=f'{et_total}', inline=False) mcd_total = len(Groupphaseuser.mcd()) embed.add_field(name='MCD', value=f'{mcd_total}', inline=False) # send message await ctx.send(ctx.author.mention, embed=embed) else: # create output embed embed = discord.Embed( colour=discord.Colour.red(), title=f'Es läuft keine Gruppenphase, über die du Informationen anfodern kannst!' ) # send embed await ctx.send(ctx.author.mention, embed=embed)