Ejemplo n.º 1
0
 async def create_additional_help(self, info, msg, prefix) -> EmbedWrapper:
     """Return command's information in an embed."""
     idx = list(self.commands.keys()).index(info[0])
     embed_var = EmbedWrapper(discord.Embed(title='{}{}'.format(
         prefix, info[0]),
                                            description=info[1],
                                            color=colors[idx]),
                              embed_type='HELP',
                              marks=EmbedWrapper.INFO)
     embed_var.add_field(name='Additional info',
                         value=info[2],
                         inline=False)
     embed_var.add_field(name='Required permissions for bot',
                         value='[{}]'.format(', '.join(info[3])),
                         inline=False)
     roles = await self.database.get_required_roles(msg, info[0])
     if roles is None:
         embed_var.add_field(name='Required permissions for user',
                             value='[{}]'.format(', '.join(info[4])),
                             inline=False)
     else:
         embed_var.add_field(name='Roles that can use the command',
                             value='[{}]'.format(', '.join(roles)),
                             inline=False)
         embed_var.add_field(name='Allowed channel types',
                             value='[{}]'.format(', '.join(info[5])),
                             inline=False)
     return embed_var
Ejemplo n.º 2
0
 async def help_embed(self, msg, commands) -> EmbedWrapper:
     prefix = await self.bot.database.get_prefix(msg)
     idx = list(self.bot.commands.keys()).index('help')
     embed_var = EmbedWrapper(discord.Embed(
         description='current prefix: [{}]'.format(prefix),
         color=colors[idx]),
         embed_type='HELP',
         marks=EmbedWrapper.INFO)
     footer = ("React with command's emoji for details or type " +
               '"{}command help" in the chat.'.format(
                   prefix))
     embed_var.set_footer(text=footer)
     i = 0
     for k, v in commands.items():
         if i == idx:
             i += 1
         if k == 'help':
             continue
         embed_var.add_field(
             name='{}{}'.format(prefix, k),
             value='{} {}'.format(v.description, emojis[i]),
             inline=False)
         i += 1
     txt = ''
     for i in embed_var.marks:
         txt += '{}{}-\u3000{}\n'.format(
                 i, '\u3000' * (3 - len(i)), embed_var.mark_info(i))
     txt += '(Marks shown in the top right corner of the embed)'
     embed_var.add_field(name='* Marks', value=txt, inline=False)
     return embed_var
Ejemplo n.º 3
0
 async def execute_command(self, msg):
     args = msg.content.split()
     if len(args) < 2:
         await msg.channel.send(text='Please add a name for the event!',
                                delete_after=5)
         return
     events = await self.show_server_events(msg)
     if args[1] in ['stop', 'remove', 'end', 'cancel']:
         if len(args) < 3:
             await msg.channel.send(
                 text='Which event do you want to delete?', delete_after=5)
             return
         e = msg.content.replace('{} {} '.format(args[0], args[1]), '', 1)
         if e not in events.keys():
             await msg.channel.send(text='No such event.', delete_after=5)
         else:
             await self.remove_server_event(msg, e, events[e])
         return
     if args[1] in ['show', 'events', 'see'] and len(args) == 2:
         if events is None:
             await msg.channel.send(text='No scheduled events.',
                                    delete_after=5)
             return
         embed_var = EmbedWrapper(discord.Embed(title='Scheduled events',
                                                color=random_color()),
                                  embed_type='EVENT',
                                  marks=EmbedWrapper.INFO)
         for k, v in events.items():
             embed_var.add_field(name=k, value=v)
         await msg.channel.send(embed=embed_var, reactions=waste_basket)
         return
     name = msg.content.replace('{} '.format(args[0]), '', 1)
     if events is not None and name in events.keys():
         await msg.channel.send(
             text='Event with this name already exists in this server.',
             delete_after=5)
         return
     embed_var = EmbedWrapper(discord.Embed(
         title=name,
         description='date:\ntime:\nchannel: {}\ntext:\ntags:'.format(
             msg.channel.id),
         color=random_color()),
                              embed_type='EVENT',
                              marks=EmbedWrapper.INFO)
     embed_var.set_footer(
         text=('* Add options by replying "<opt> <value>" ' +
               '\n* Multiple options can be added at one,' +
               ' separated with ";".\n' +
               '* Date should be given in day and month format.\n' +
               '* Time should be given in hours and minutes format.\n'
               '* Name can also be changed.\n' +
               '* Channel should be given with its name.\n'
               '* After adding desired options (date and time are ' +
               'mandatory) reply "commit" to start the event.\n' +
               'Example:\n"date 27. 7.; time 16:00; text Test text; "' +
               'name new_name; tags test_tags; channel general; commit".'))
     await msg.channel.send(embed=embed_var)
Ejemplo n.º 4
0
 async def create_info_embed(self, msg):
     # build embed with server info
     embed_var = EmbedWrapper(discord.Embed(
         title=msg.guild.name,
         description="Server information",
         color=colors[list(self.bot.commands.keys()).index('server')]),
                              embed_type="SERVER",
                              marks=EmbedWrapper.INFO)
     # check if guild has description
     if (msg.guild.description):
         embed_var.description = msg.guild.description
     # add guild's icon to the embed
     # count total and online members
     embed_var.add_field(name='Total members',
                         value=msg.guild.member_count,
                         inline=False)
     embed_var.add_field(name='Online members',
                         value=self.get_online_members(msg),
                         inline=False)
     owner = await msg.guild.fetch_member(str(msg.guild.owner_id))
     # add owner
     # add both his nickname and username (if has nickname set up)
     if owner.nick:
         owner = '{nick}\n({user})'.format(nick=owner.nick, user=owner)
     embed_var.add_field(name='Owner', value=owner, inline=False)
     # add rules channel info if it is set up
     if msg.guild.rules_channel:
         embed_var.add_field(name='Rules channel',
                             value=msg.guild.rules_channel,
                             inline=False)
     # check for afk channel
     if msg.guild.afk_channel:
         embed_var.add_field(
             name='AFK channel',
             value="{channel}\n~timeout: {timeout} min".format(
                 channel=msg.guild.afk_channel,
                 timeout=msg.guild.afk_timeout // 60),
             inline=False)
     if msg.guild.icon_url:
         embed_var.set_thumbnail(url=msg.guild.icon_url)
     embed_var.set_footer(
         text='React with {} to see server configurations.'.format(emojis[
             list(self.bot.commands.keys()).index('config')]))
     return embed_var
Ejemplo n.º 5
0
 async def show_leaderboard(self, msg):
     # show guild members that played rps in order
     # best to worst
     if self.bot.database.connected is False:
         await msg.channel.send(text='No database connection.',
                                delete_after=5)
         return
     cursor = self.bot.database.cnx.cursor(buffered=True)
     cursor.execute(
         "SELECT * FROM rock_paper_scissors WHERE guild_id = '{}'".format(
             msg.guild.id))
     fetched = cursor.fetchall()
     if fetched is None or fetched is []:
         await msg.channel.send(text='No availible leaderboard.',
                                delete_after=5)
         return
     embed_var = EmbedWrapper(discord.Embed(title='Leaderboard',
                                            color=random_color()),
                              embed_type=self.embed_type,
                              marks=EmbedWrapper.INFO)
     users = {}
     for i in fetched:
         user = msg.guild.get_member(int(i[1]))
         if user is None:
             continue
         users[user] = i[2]
     users = {
         k: v
         for k, v in sorted(
             users.items(), key=lambda item: item[1], reverse=True)
     }
     i = 1
     for u, w in users.items():
         if i > 10:
             break
         name = u.name if not u.nick else u.nick
         embed_var.add_field(name='{}.  {}'.format(i, name),
                             value=w,
                             inline=False)
         i += 1
     await msg.channel.send(embed=embed_var, reactions=waste_basket)
Ejemplo n.º 6
0
 async def create_config_embed(self, msg):
     embed_var = EmbedWrapper(discord.Embed(
         title=msg.guild.name,
         description="Server configurations",
         color=colors[list(self.bot.commands.keys()).index('config')]),
         embed_type='CONFIG',
         marks=['I'])
     if (msg.guild.icon_url):
         embed_var.set_thumbnail(url=msg.guild.icon_url)
     prefix = await self.bot.database.get_prefix(msg)
     embed_var.add_field(
         name='Prefix',
         value='[{}]'.format(prefix),
         inline=False)
     wlcm = await self.bot.database.get_welcome(msg)
     embed_var.add_field(
         name='Welcome_text',
         value='None' if wlcm is None else wlcm,
         inline=False)
     cmds = await self.bot.database.roles_for_all_commands(msg)
     embed_var.add_field(
         name='Roles that can use commands',
         value='None' if cmds is None else cmds,
         inline=False)
     embed_var.set_footer(
         text='React with {} to see server info.'.format(
             emojis[list(self.bot.commands.keys()).index('server')]))
     return embed_var
Ejemplo n.º 7
0
 async def create_embed(self, msg, user):
     # build the embed with user info
     embed_var = EmbedWrapper(discord.Embed(
         title=user.name if not user.nick else user.nick,
         color=random_color()),
         embed_type="USER",
         marks=EmbedWrapper.INFO)
     # if user has nickname set up add nickname
     # else only username
     # add if user is bot
     if user.bot:
         embed_var.title += ' [bot]'
     # add user's avatar picture to the embed
     if user.avatar_url:
         embed_var.set_thumbnail(url=user.avatar_url)
     embed_var.add_field(
         name='Joined server',
         value=str(user.joined_at).split()[0],
         inline=False
     )
     rps_wins = await self.add_rps_wins(msg, user)
     if rps_wins is not None:
         embed_var.add_field(
             name=rps_wins[0],
             value=rps_wins[1],
             inline=False)
     roles = 'everyone'
     for i in user.roles:
         if str(i.name) != '@everyone':
             roles += ',\n' + str(i.name)
     embed_var.add_field(
         name='Roles',
         value=roles,
         inline=False
     )
     return embed_var