Exemple #1
0
 async def color(self, ctx, color):
     if not color:
         await ctx.send(embed=error_em('Nie podałeś(aś) koloru.'))
     elif not re_compile('#[a-f0-9]{6}').fullmatch(color.lower()):
         await ctx.send(embed=error_em('Błędny format koloru.'))
     else:
         await ctx.send(embed=color_em(color))
Exemple #2
0
 async def wybierz(self, ctx, *, things=None):
     if not things:
         await ctx.send(embed=error_em('Nie podałeś nic.'))
     else:
         things = things.split(', ')
         if len(things) < 2:
             await ctx.send(embed=error_em('Podaj co najmniej 2 rzeczy.'))
         else:
             await ctx.send(embed=choose_em(':arrow_right:', choice(things))
                            )
Exemple #3
0
 async def profil(self, ctx, user=None):
     user_id = check_mention(user) if user else ctx.message.author.id
     if user_id:
         member = ctx.guild.get_member(user_id)
         if member:
             await ctx.send(embed=profile_em(member))
         else:
             await ctx.send(embed=error_em(
                 'Taki użytkownik nie znajduje się na tym serwerze.'))
     else:
         await ctx.send(embed=error_em('Błędnie podałeś(aś) użytkownika.'))
 async def event(self, ctx: Context, option: str, *, title: str):
     if option not in ['nowy', 'n']:
         await ctx.send(embed=error_em('Błędna opcja.'))
     elif not title:
         await ctx.send(embed=error_em('Brak tematu.'))
     else:
         self.msg = await ctx.send(embed=event_confirm_em(title))
         self.raw_text = title
         self.starter: User = ctx.author
         try:
             await self.msg.add_reaction(self.emoji_up)
             await self.msg.add_reaction(self.emoji_down)
         finally:
             self.bot.add_listener(self.wiat_for_reaction_response, 'on_reaction_add')
Exemple #5
0
 async def warns(self, ctx):
     warns_records = get_warns()
     if len(warns_records) > 0:
         str_list = '```py\n'
         for record in warns_records.values():
             user = self.bot.get_user(int(record['user_id']))
             if user is not None:
                 user = '******'.format(user)
             else:
                 user = f'{record["user_id"]}'
             if not record['warn_date'] or not record['warn_time']:
                 date_time = '-'
             else:
                 date_time = f'{record["warn_date"]} {record["warn_time"]}'
             if not record['warn_reason']:
                 reason = 'Brak'
             else:
                 reason = record['warn_reason']
             str_list += f'{record["warn_id"]}. {user}\n' \
                         f'   Powód: \' {reason} \'\n' \
                         f'   Liczba: {record["warn_level"]}  Data: {date_time}\n\n'
         str_list += '\n```'
         await ctx.send(embed=warns_em(str_list))
     else:
         await ctx.send(embed=error_em('Brak ostrzeżeń.'))
Exemple #6
0
 async def rate(self, ctx, *, arg=None):
     if not arg:
         await ctx.send(embed=error_em('Musisz podać rzecz do ocenienia!'))
     else:
         arg = arg.lower()
         seed(arg)
         ocena = randint(1, 10)
         await ctx.send(embed=rate_em(arg, ocena))
Exemple #7
0
async def error_msg(ctx, error):
    if isinstance(error, MissingPermissions):
        s = 'Nieuprawnionym wstęp wzbroniony!'

    elif isinstance(error, BotMissingPermissions):
        s = 'Nie posiadam uprawnień!'

    else:
        s = f'```py\n{error.__class__.__name__}: {error}```'

    await ctx.send(embed=error_em(s))
Exemple #8
0
 async def eight_ball(self, ctx, *, question=None):
     if not question:
         await ctx.send(embed=error_em('Nie podałeś(aś) pytania.'))
     elif not question.endswith('?'):
         await ctx.send(
             embed=error_em('Pytania kończą się znakiem zapytania.'))
     elif len(question) < 10:
         await ctx.send(embed=error_em('Pytanie jest zbyt krótkie.'))
     else:
         control = ''
         while True:
             seed(question.lower() + control)
             result = choice([
                 'Jasne że tak', 'Może lepiej nie', 'Chyba sobie żartujesz',
                 'Też nie wiem', 'Lepiej spytać sąsiada',
                 'Admin mówi że tak',
                 'Tak, ale św. Mikołajowi się to nie spodoba',
                 'Teoretycznie tak, a praktycznie nie',
                 'Trudne pytanie, muszę się chwilę zastanowić',
                 'A co za różnica', 'Nie, znaczy tak',
                 'Tak, ale nie chcę wiedzieć skąd to pytanie',
                 'A nie możesz samemu sobie odpowiedzieć',
                 'Proszę pomóż mi, jestem uwięziony w środku bota',
                 'Nie rozumiem', 'Spróbuj jeszcze raz', 'Pomyśl',
                 'Idę coś zjeść, będę za 15 minut', 'Nie mi oceniać',
                 'Ja też potrzebuję snu',
                 'Proszę przestań się mnie pytać o takie głupoty',
                 'Wciśnij Alt + F4', 'Jednorożce, tak to wszystko',
                 'Chyba nie myślisz, że serio pomogę', 'A co zrobiłby Jedi',
                 'To morderca', 'Żartujesz... Prawda?',
                 'Lepiej zapytaj się mnie, czy mnie to obchodzi', 'Na 100%',
                 'Tak, ale zrób to będąc nawalonym tak jak tylko potrafisz',
                 'Nie mogę teraz powiedzieć', 'Zależy', 'To nie jest OK',
                 'Odpowiedź znajdziesz po swojej prawej stronie'
             ])
             if result != self.bot.history['last_8ball']:
                 self.bot.history['last_8ball'] = result
                 break
             else:
                 control += urandom(1).decode(encoding='utf-8')
         await ctx.send(embed=eight_ball_em(result))
Exemple #9
0
 async def losowy(self, ctx, arg: Union[Role, int]):
     if type(arg) is int:
         role = ctx.guild.get_role(arg)
         if not role:
             await ctx.send(embed=error_em('Błędny format komendy.'))
         else:
             arg = role
     if type(arg) is not Role:
         await ctx.send(embed=error_em('Błędny format komendy.'))
     elif arg not in ctx.guild.roles:
         await ctx.send(embed=error_em('Nie ma takiej roli.'))
     else:
         possibles = [
             member for member in ctx.guild.members if arg in member.roles
         ]
         if not possibles:
             await ctx.send(embed=error_em(
                 f'Nie mogę znaleźć nikogo z rolą **{arg.name}**.'))
         else:
             await ctx.send(embed=profile_em(choice(possibles)).set_footer(
                 text=f'Wylosowany(a) z grupy {arg.name}.'))
Exemple #10
0
 async def kostka(self, ctx, k=6, x=1, sep=', '):
     try:
         k = int(k)
         x = int(x)
     except ValueError:
         await ctx.send(
             embed=error_em('Podane wartości muszą być liczbami.'))
     else:
         if k < 4:
             await ctx.send(embed=error_em(
                 'Liczba ścianek musi wynosić co najmniej 4.'))
         elif x < 1:
             await ctx.send(
                 embed=error_em('Liczba rzutów musi być dodatnia.'))
         elif k > 100 or x > 100:
             await ctx.send(embed=error_em('Zbyt duże wartości!'))
         else:
             result = []
             for i in range(x):
                 result.append(str(randint(1, k)))
             await ctx.send(embed=dice_em(result, sep))
Exemple #11
0
 async def dwarn(self, ctx, user_id=None):
     if user_id is not None:
         user_id = check_mention(user_id)
         if user_id:
             del_warns(user_id)
             user = self.bot.get_user(user_id)
             member = ctx.guild.get_member(user_id)
             if member:
                 for i in range(3):
                     try:
                         await member.remove_roles(
                             ctx.guild.get_role(warn_roles_ids()[i + 1]))
                     except AttributeError:
                         pass
             await ctx.send(embed=success_em(
                 f'Usunięto ostrzeżenia użytkownikowi **{user.mention if user else f"`{user_id}`"}**.'
             ))
         else:
             await ctx.send(embed=error_em('Błędny format komendy.'))
     else:
         await ctx.send(embed=error_em('Nie podałeś(aś) użytkownika.'))
Exemple #12
0
 async def purge_listener(self, message):
     if message.channel.id == self.settings['check_channel_id']:
         try:
             await message.guild.get_member(message.author.id).add_roles(
                 message.guild.get_role(self.settings['active_role_id']),
                 reason=f'Napisał(a) na kanale {message.guild.get_channel(self.settings["check_channel_id"]).name}'
             )
             await message.guild.get_member(message.author.id).remove_roles(
                 message.guild.get_role(self.settings['active_role_id']),
                 reason=f'Napisał(a) na kanale {message.guild.get_channel(self.settings["check_channel_id"]).name}'
             )
             print(f'[PURGE] Active: {message.author}')
         except HTTPException:
             await message.channel.send(embed=error_em(f'Nie mogę zatwierdzić **{message.author.name}**.'))
Exemple #13
0
 async def uwarn(self, ctx, user_id=None, *, reason=None):
     if user_id is not None:
         if user_id not in ['all', 'wszyscy']:
             if reason is not None:
                 if len(reason) <= 30:
                     user_id = check_mention(user_id)
                     if user_id:
                         user = self.bot.get_user(user_id)
                         if user is not None:
                             update_warn(user_id, reason)
                             await ctx.send(embed=success_em(
                                 f'Opis ostrzeżenia dla **{user.name}** został zaktualizowany.'
                                 f'```{reason}```'))
                         else:
                             await ctx.send(embed=error_em(
                                 'Nie mogę znaleźć takiego użytkownika.'))
                     else:
                         await ctx.send(
                             embed=error_em('Błędny format komendy.'))
                 else:
                     await ctx.send(embed=error_em(
                         'Maksymalna długość powodu ostrzeżenia to **30 znaków**.'
                     ))
             else:
                 await ctx.send(embed=error_em('Nie podałeś(aś) powodu.'))
         else:
             count = 0
             msg = await ctx.send(embed=please_wait_em())
             for record in get_warns():
                 member = ctx.guild.get_member(record[0])
                 if member is not None:
                     count += 1
                     for role in range(3):
                         try:
                             warn_role = ctx.guild.get_role(
                                 warn_roles_ids()[role + 1])
                             if role < record[1]:
                                 await member.add_roles(
                                     warn_role,
                                     reason=
                                     f'Użytkownik posiada {record[1]} poziom ostrzeżeń.'
                                 )
                             else:
                                 await member.remove_roles(
                                     warn_role,
                                     reason=
                                     f'Użytkownik posiada {record[1]} poziom ostrzeżeń.'
                                 )
                         except Forbidden:
                             await msg.edit(embed=error_em(
                                 'Nie mam uprawnień do zmiany ról!'))
                         finally:
                             print(member.display_name)
             await msg.edit(embed=success_em(
                 f'Zaktualizowani użytkownicy: **{count}**'))
     else:
         await ctx.send(embed=error_em('Nie podałeś(aś) użytkownika.'))
Exemple #14
0
 async def warn(self, ctx, user_id=None, *, reason='Brak'):
     if user_id:
         user_id = check_mention(user_id)
         if user_id:
             user = self.bot.get_user(user_id)
             if user:
                 warns = get_warn(user_id)
                 if len(warns) > 0:
                     count = warns[0][1] + 1
                 else:
                     count = 1
                 add_warn(user_id, reason)
                 if count <= 3:
                     member = ctx.guild.get_member(user_id)
                     try:
                         await member.add_roles(
                             ctx.guild.get_role(warn_roles_ids()[count]))
                     except AttributeError:
                         pass
                     await ctx.send(embed=success_em(
                         f'Ostrzeżono: **{user.name}**.\n'
                         f'Powód: **{reason if reason else "Brak"}**.\n'
                         f'To jest **{count}** ostrzeżenie.'))
                     try:
                         await user.send(embed=error_em(
                             f' Powód:```\n{reason if reason else "Brak"}```To Twoje **{count}** ostrzeżenie.',
                             ':exclamation: Zostałeś ostrzeżony(a)!'))
                     except Forbidden:
                         await ctx.send(embed=error_em(
                             f'Użytkownik **{user}** zablokował mnie (warto to zapisać).',
                             ':no_entry: Ojć!'))
                     except HTTPException:
                         await ctx.send(embed=error_em(
                             f'Nie mogę wysłać do **{user}** wiadomości przez problem z Discordem.'
                         ))
                 else:
                     await ctx.guild.ban(user=user,
                                         reason='Przekroczenie 3 ostrzeżeń',
                                         delete_message_days=3)
                     await ctx.send(embed=error_em(
                         f'Użytkownik {user.name} został zbanowany.',
                         title=':no_entry: Koniec ostrzeżeń'))
                     del_warns(user_id)
             else:
                 await ctx.send(
                     embed=error_em('Nie znaleziono użytkownika.'))
         else:
             await ctx.send(embed=error_em('Błędny format komendy.'))
     else:
         await ctx.send(
             embed=error_em('Musisz podać, kogo chcesz upomnieć.'))
Exemple #15
0
    async def losowy(self, ctx, arg=None):
        role_id = 0
        member = None

        if arg:
            # Role ID only
            if len(arg) == 18:
                try:
                    role_id = int(arg)
                except ValueError:
                    pass
            # Role mention
            elif len(arg) == 21:
                role_id = int(arg[3:-1])
            role = ctx.guild.get_role(role_id)
            if not role:
                # User mention
                if len(arg) == 22:
                    member = ctx.guild.get_member(int(arg[3:-1]))
        else:
            role = ctx.guild.default_role

        if member:
            await ctx.send(mebed=member_em(member))
        elif role:
            possibles = [
                member for member in ctx.guild.members if role in member.roles
            ]
            if possibles:
                await ctx.send(embed=member_em(choice(possibles)).set_footer(
                    text=f'Wylosowany(a) z grupy {role.name}.'))
            else:
                await ctx.send(embed=error_em(
                    f'Nie mogę znaleźć nikogo z rolą {role.mention}.'))
        else:
            await ctx.send(embed=error_em('Nie ma takiej roli.'))
Exemple #16
0
    async def punkty(self, ctx, user=None, option=None, amount=None):
        if not user:
            await ctx.send(embed=error_em('Nie podałeś użytkownika.'))

        elif not option:
            await ctx.send(embed=error_em('Nie podałeś opcji.'))

        elif option not in ['+', '-', '=']:
            await ctx.send(embed=error_em('Błędna opcja.'))

        elif not amount:
            await ctx.send(embed=error_em('Nie podałeś wartości punktów.'))

        elif amount == 0:
            await ctx.send(embed=error_em('Musisz podać liczbę różną od zera.')
                           )

        else:
            try:
                amount = int(amount)
            except ValueError:
                await ctx.send(embed=error_em('Błędna wartość.'))
            else:
                user_id = check_mention(user)
                if not user_id:
                    await ctx.send(embed=error_em('Błędnie podany użytkownik.')
                                   )
                else:
                    member = ctx.guild.get_member(user_id)
                    if not member:
                        await ctx.send(embed=error_em(
                            'Ten użytkownik nie znajduje się na tym serwerze.')
                                       )
                    else:
                        func = add_points if option == '+' else remove_points if option == '-' else set_points
                        func(user_id, amount)
                        option_human = "Dodano" if option == "+" else "Odjęto" if option == "-" else "Ustawiono"
                        await ctx.send(embed=success_em(
                            f'Punkty użytkownika **{member.display_name}** zostały zaktualizowane.\n'
                            f'**{option_human}** punkty w ilości: **{amount}**.'
                        ))
Exemple #17
0
    async def purge(self, ctx, option='start'):
        option = option.lower()
        if option in ['start', 'status', 'update', 'stop']:
            gid = ctx.guild.id
            self.settings = purge_settings(gid)
            active_role = ctx.guild.get_role(self.settings['active_role_id'])
            inactive_role = ctx.guild.get_role(self.settings['inactive_role_id'])
            purge_on = purge_enabled(gid)

            if option == 'start':
                if not purge_on:
                    await ctx.guild.get_channel(self.settings['check_channel_id']).send(
                        embed=info_em('Rozpoczęcie czystki. Proszę napisz dowolną wiadomość na tym kanale.')
                    )
                    purge_enable(gid)
                    self.bot.add_listener(self.purge_listener, 'on_message')
                    await ctx.send(embed=success_em(
                        f'Czystka włączona na kanale'
                        f' {ctx.guild.get_channel(self.settings["check_channel_id"]).mention}.'
                    ))
                else:
                    await ctx.send(embed=error_em('Czystka jest już włączona lub błąd ustawień.'))

            elif option == 'status':
                if purge_on:
                    active = 0
                    inactive = 0
                    for member in ctx.guild.members:
                        if not member.bot:
                            if active_role in member.roles:
                                active += 1
                            elif inactive_role in member.roles:
                                inactive += 1
                    await ctx.send(embed=info_em(
                        f'Aktywni: **{active}**\n'
                        f'Nieaktywni: **{inactive}**'
                    ))
                else:
                    await ctx.send(embed=error_em('Czystka nie jest włączona lub błąd ustawień.'))

            elif option == 'update':
                if purge_on:
                    msg = await ctx.send(embed=please_wait_em())
                    inactive = 0
                    for index, member in enumerate(ctx.guild.members):
                        if not member.bot:
                            if active_role not in member.roles:
                                await member.add_roles(inactive_role, reason='Czystka')
                                inactive += 1
                                print(f'[PURGE] Inactive: {member}')
                        if index % 10 == 0:
                            await msg.edit(embed=please_wait_em(
                                f'({inactive})'
                                f'**{len(ctx.guild.members) // index}%**'
                            ))
                    await msg.edit(embed=success_em(f'Dodane role `@nieaktywny`: **{inactive}**.'))
                else:
                    await ctx.send(embed=error_em('Czystka nie jest włączona lub błąd ustawień.'))

            elif option == 'stop':
                if purge_enabled(gid):
                    msg = await ctx.send(embed=please_wait_em())
                    kicked = 0
                    unable = 0
                    for member in ctx.guild.members:
                        if inactive_role in member.roles:
                            try:
                                await member.kick(reason='Czystka')
                            except Forbidden or HTTPException:
                                unable += 1
                            else:
                                kicked += 1
                    await msg.edit(embed=success_em(
                        f'Wyrzucono: **{kicked}**\n'
                        f'Niepowodzenia: **{unable}**\n'
                        f'Czystkę rozpoczęto: **{self.settings["purge_started_date"]}**'
                    ))
                    purge_disable(gid)
                    self.bot.remove_listener(self.purge_listener, 'on_message')
                else:
                    await ctx.send(embed=error_em('Czystka jest wyłączona lub błąd ustawień.'))

        else:
            await ctx.send(embed=error_em('Błędny argument'))