def returnPresent(guild_id: int, role_list: list, class_list: list): """ Return presents and absents students who have reacted on a message """ class_list.sort(key=lambda x: Tools.name(x).lower()) role_list.sort(key=lambda x: Tools.name(x).lower()) messages = Server(guild_id).returnLanguage("endcall") presents_msg = messages[0] absents_msg = str() students = [] for member in class_list: if member.id not in students: presents_msg += f"• *{Tools.name(member)}* <@{member.id}>\n" # [user.display_name,user.id] students.append(member.id) if role_list is not None: role_list.remove(member) # if there is no more people if not role_list: absents_msg += messages[2] # if there is still people else: absents_msg = "\n" + messages[1] for member in role_list: absents_msg += f"• *{Tools.name(member)}* <@{member.id}>\n" return presents_msg, absents_msg, role_list, students
async def Send_MP_absents(self, absents: list, message: discord.Message, delay: int, teacher: discord.User): """ Send a mp message to all absents """ language_msg = Server(message.guild.id).returnLanguage("sendabsents") embed = discord.Embed(color=discord.Colour.red(), title="Absence") embed.set_author(name=Tools.name(message.author), icon_url=message.author.avatar_url) embed.add_field(name=language_msg[0], value=Tools.name(message.author)) embed.add_field(name=language_msg[1], value=message.guild) embed.add_field(name=language_msg[2], value=message.guild) embed.add_field(name="Date", value=date.today().strftime("%d/%m/%Y")) embed.add_field(name=language_msg[3][0], value=f"[{language_msg[3][1]}]({message.jump_url})") missing = {} for member in absents: try: await member.send(embed=embed) if delay: time = datetime.now() message = await member.send( "Click on the emote below to automatically send a late ticket message to the teacher." ) await message.add_reaction("⏰") missing[message.id] = LateStudent(teacher, member, message) except discord.errors.Forbidden: await teacher.send( f"Unable to send a late ticket to {member.mention}") return missing
async def Send_MP_absents(self, absents: list, entry: str, message: discord.Message, delay: int): """ Send a mp message to all absents """ language_msg = returnLanguage( readGuild(message.guild.id)["language"], "sendabsents") embed = discord.Embed(color=discord.Colour.red(), title="Absence") embed.set_author(name=Tools.name(message.author), icon_url=message.author.avatar_url) embed.add_field(name=language_msg[0], value=Tools.name(message.author)) embed.add_field(name=language_msg[1], value=message.guild) embed.add_field(name=language_msg[2], value=message.guild) embed.add_field(name="Date", value=date.today().strftime("%d/%m/%Y")) embed.add_field(name=language_msg[3][0], value=f"[{language_msg[3][1]}]({message.jump_url})") if delay: embed.add_field( name="Time on receipt of the message to report late", value=f"{delay} minutes") for member in absents: await member.send(embed=embed) if delay: message = await member.send( "Click to send a message to the teacher that you're late") await message.add_reaction("⏰") self.missing[message.id] = entry
async def Call(self, context, classroom, showAll: bool): class_role = Tools.convert(classroom) data = readGuild(context.guild.id) if class_role is None: await Tools.embedError("This is not a role, but a specific user") else: if Tools.got_the_role(data["teacher"], context.author): self.callList[ f"{context.guild.id}-{context.message.id}"] = Check( class_role, context.message.author, showAll, data["delay"] if data["delay"] > 0 else 0) message = returnLanguage(data["language"], "startcall") embed = discord.Embed(color=discord.Colour.green(), title=message[0], description=message[1]) embed.set_author(name=Tools.name(context.message.author), icon_url=context.message.author.avatar_url) embed.add_field(name=f"**__{message[2]}__**", value=classroom) embed.add_field(name="Date", value=date.today().strftime("%d/%m/%Y")) embed.set_footer(text=message[3]) await context.channel.send(embed=embed) await context.message.add_reaction( "✅") # on rajoute les réactions ✅ & 🆗 await context.message.add_reaction("🆗") await context.message.add_reaction("🛑") else: await context.channel.send("<@{}> : {}".format( context.author.id, returnLanguage(data["language"], "notTeacher")))
async def Call(self, context, args: tuple): classroom = context.message.role_mentions data = Server(context.guild.id) showAll = '-a' in args try: if len(classroom) != 1: await Tools.SendError(context.channel, "Please precise **one** role to call") return None delay = data.delay if data.delay > 0 else 0 if '-d' in args: delay = int(args[args.index('-d') + 1]) if delay > 60 or delay < 0: raise ValueError message = data.GetLanguage().startcall embed = discord.Embed(color=discord.Colour.green(), title=message[0], description=message[1]) embed.set_author(name=Tools.name(context.message.author), icon_url=context.message.author.avatar_url) embed.add_field(name=f"**__{message[2]}__**", value=classroom[0].mention) embed.add_field(name="Date", value=date.today().strftime("%d/%m/%Y")) embed.add_field(name="Number of students in this class", value=str(len(classroom[0].members))) # embed.add_field() embed.set_footer(text=message[3]) Botmessage = await context.channel.send(embed=embed) await Botmessage.add_reaction("✅" ) # on rajoute les réactions ✅ & 🆗 await Botmessage.add_reaction("🆗") await Botmessage.add_reaction("🛑") self.callList[f"{context.guild.id}-{Botmessage.id}"] = Check( classroom[0], Botmessage, showAll, delay, context.author) return Botmessage except (ValueError, IndexError): raise Exception("Invalid Args")