Beispiel #1
0
 async def _set_active(self, ctx, *, identifier):
     """**Usage**: `!event set_active/set/sa <event name | event id>`"""
     if identifier.isdigit():
         count = EventTable.update(active=True).where(
             EventTable.id == identifier).execute()
     else:
         count = EventTable.update(active=True).where(
             EventTable.eventname == identifier).execute()
     if count == 1:
         if identifier.isdigit():
             EventTable.update(active=False).where(
                 EventTable.id != identifier).execute()
         else:
             EventTable.update(active=False).where(
                 EventTable.eventname != identifier).execute()
         message = f"Successfully set active event to **{identifier}**"
         colour = discord.Colour.green()
         reaction = self.success_react
     elif count == 0:
         message = "No event found by that name."
         colour = discord.Colour.red()
         reaction = self.failed_react
     else:
         EventTable.update(active=False).execute()
         message = "Something went wrong, all events are now inactive."
         colour = discord.Colour.red()
         reaction = self.failed_react
     await ctx.message.add_reaction(reaction)
     await ctx.send(embed=discord.Embed(colour=colour, description=message),
                    delete_after=10)
Beispiel #2
0
 async def _list(self, ctx, all_events=None):
     """**Usage**: `!event list/li/l ['all']`
     Lists only the active event by default, will list all events if 'all' is included."""
     result = (EventTable.select(
         EventTable.id, EventTable.eventname, EventTable.active,
         EventTable.role).join(
             GuildTable,
             on=(EventTable.guild_id == GuildTable.snowflake)).where(
                 GuildTable.snowflake == ctx.guild.id))
     if all_events is None or all_events.lower() != "all":
         result = result.where(EventTable.active)
         active_str = "Active"
     else:
         active_str = "All"
     if len(result) == 0:
         await ctx.message.add_reaction(self.failed_react)
         return await ctx.send(f"No {active_str} events found.")
     event_embed = embed = discord.Embed(
         colour=discord.Colour.purple(),
         description=f"{active_str} Events.")
     for event in result:
         try:
             event_role = ctx.guild.get_role(event.role)
         except:
             event_role = None
         if event_role:
             value = f"**{event_role.name}** will be assigned to all trainers who check-in to this event."
         else:
             value = "No role associated with this event."
         name = f"(*#{event.id}*) **{event.eventname}**"
         if event.active:
             name += " - *Active*"
         embed.add_field(name=name, value=value, inline=False)
     await ctx.message.add_reaction(self.success_react)
     return await ctx.send(embed=event_embed)
Beispiel #3
0
 async def _updaterole(self, ctx, *, info):
     """**Usage**: `!event updaterole/ur <event name> <new role>`"""
     info = re.split(r',\s+', info)
     if len(info) < 2:
         await ctx.message.add_reaction(self.failed_react)
         self.bot.help_logger.info(
             f"User: {ctx.author.name}, channel: {ctx.channel}, error: Insufficient info: {info}."
         )
         return await ctx.send(
             "Please provide both a valid event name and the new role name.",
             delete_after=10)
     name = info[0]
     role = await self._validate_or_create_role(ctx, info[1], name)
     if not role:
         return
     updated = EventTable.update(role=role.id).where(
         EventTable.eventname == name).execute()
     if updated == 0:
         message = "No event found by that name."
         colour = discord.Colour.red()
         reaction = self.failed_react
     elif updated == 1:
         message = f"Successfully changed role for **{name}**."
         colour = discord.Colour.green()
         reaction = self.success_react
     else:
         message = "Something went wrong."
         colour = discord.Colour.red()
         reaction = self.failed_react
     await ctx.message.add_reaction(reaction)
     await ctx.send(embed=discord.Embed(colour=colour, description=message),
                    delete_after=10)
Beispiel #4
0
 async def _updatename(self, ctx, *, info):
     """**Usage**: `!event updatename <current event name> <new event name>`
     **Aliases**: `rename, changename, rn, un, cn`"""
     info = re.split(r',\s+', info)
     if len(info) < 2:
         await ctx.message.add_reaction(self.failed_react)
         self.bot.help_logger.info(
             f"User: {ctx.author.name}, channel: {ctx.channel}, error: Insufficient info: {info}."
         )
         return await ctx.send(
             "Please provide both the current event name and a new event name.",
             delete_after=10)
     oldname = info[0]
     newname = info[1]
     updated = EventTable.update(eventname=newname).where(
         EventTable.eventname == oldname).execute()
     if updated == 0:
         message = "No event found by that name."
         colour = discord.Colour.red()
         reaction = self.failed_react
     elif updated == 1:
         message = f"Successfully renamed **{oldname}** to **{newname}**."
         colour = discord.Colour.green()
         reaction = self.success_react
     else:
         message = "Something went wrong."
         colour = discord.Colour.red()
         reaction = self.failed_react
     await ctx.message.add_reaction(reaction)
     await ctx.send(embed=discord.Embed(colour=colour, description=message),
                    delete_after=10)
Beispiel #5
0
 async def _create(self, ctx, *, info):
     info = re.split(r',\s+', info)
     if len(info) < 2:
         await ctx.message.add_reaction(self.failed_react)
         self.bot.help_logger(f"User: {ctx.author.name}, channel: {ctx.channel}, error: Insufficient info: {info}.")
         return await ctx.send("Please provide both an invite code and a role name.", delete_after=10)
     name = info[0]
     role = await self._validate_or_create_role(ctx, info[1])
     if not role:
         return
     try:
         event, __ = EventTable.get_or_create(guild=ctx.guild.id, eventname=name, active=False, role=role.id)
         if event:
             message = f"Event **{name}** successfully created with role: **{role.name}**."
             colour = discord.Colour.green()
             reaction = self.success_react
         else:
             message = "Failed to create event. Please try again."
             colour = discord.Colour.red()
             reaction = self.failed_react
     except peewee.IntegrityError:
         message = "An event already exists by that name."
         colour = discord.Colour.red()
         reaction = self.failed_react
     await ctx.message.add_reaction(reaction)
     await ctx.send(embed=discord.Embed(colour=colour, description=message), delete_after=10)
Beispiel #6
0
 async def _checkin(self, ctx, member: discord.Member):
     result = (EventTable.select(EventTable.eventname,
                                 EventTable.role)
                         .where((EventTable.active == True) &
                                (EventTable.guild_id == member.guild.id)))
     roles = [r.role for r in result]
     events = [r.eventname for r in result]
     if len(roles) < 1:
         await ctx.message.add_reaction(self.failed_react)
         self.bot.help_logger(f"User: {ctx.author.name}, channel: {ctx.channel}, error: No active event.")
         return await ctx.send("There is no active event.", delete_after=10)
     if len(roles) > 1:
         await ctx.message.add_reaction(self.failed_react)
         self.bot.help_logger(f"User: {ctx.author.name}, channel: {ctx.channel}, error: Too many active events.")
         return await ctx.send("There are too many active events, please contact an admin.", delete_after=10)
     try:
         role = await self._validate_or_create_role(ctx, roles[0], eventname=events[0], checkin=True)
         if role is None:
             return
         await member.add_roles(*[role])
         await asyncio.sleep(0.1)
         if role not in member.roles:
             await ctx.message.add_reaction(self.failed_react)
             self.bot.help_logger(f"User: {ctx.author.name}, channel: {ctx.channel}, error: Failed to give event badge {events[0]} to {member.display_name}.")
             return await ctx.send(f"Failed to give event role to {member.display_name}.", delete_after=10)
     except discord.Forbidden:
         await ctx.message.add_reaction(self.failed_react)
         self.bot.help_logger(f"User: {ctx.author.name}, channel: {ctx.channel}, error: Failed to give event badge {events[0]} to {member.display_name} due to permissions.")
         return await ctx.send(f"Failed to give event role to to {member.display_name} because you do not have permission", delete_after=10)
     message = f"Checked in **{member.display_name}** for the **{events[0]}** event!"
     await ctx.send(embed=discord.Embed(colour=discord.Colour.green(), description=message), delete_after=10)
     await ctx.message.add_reaction(self.success_react)
Beispiel #7
0
 async def _set_active(self, ctx, *, name):
     count = EventTable.update(active=True).where(EventTable.eventname == name).execute()
     if count == 1:
         EventTable.update(active=False).where(EventTable.eventname != name).execute()
         message = f"Successfully set active event to **{name}**"
         colour = discord.Colour.green()
         reaction = self.success_react
     elif count == 0:
         message = "No event found by that name."
         colour = discord.Colour.red()
         reaction = self.failed_react
     else:
         EventTable.update(active=False).execute()
         message = "Something went wrong, all events are now inactive."
         colour = discord.Colour.red()
         reaction = self.failed_react
     await ctx.message.add_reaction(reaction)
     await ctx.send(embed=discord.Embed(colour=colour, description=message), delete_after=10)