Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions bot/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from enum import Enum

from pydantic import BaseModel, BaseSettings, root_validator
from pydis_core import PaginationEmojis as PaginationEmojisModel


class EnvConfig(BaseSettings):
Expand Down Expand Up @@ -702,3 +703,6 @@ class _Keys(EnvConfig):
"Noooooo!!",
"I can't believe you've done this",
]

PaginationEmojis = PaginationEmojisModel(delete=Emojis.trashcan)

33 changes: 25 additions & 8 deletions bot/exts/filtering/filtering.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@
from discord.ext.commands import BadArgument, Cog, Context, command, has_any_role
from pydis_core.site_api import ResponseCodeError
from pydis_core.utils import scheduling
from pydis_core import LinePaginator
from pydis_core.utils.paste_service import PasteTooLongError, PasteUploadError, send_to_paste_service

import bot
import bot.exts.filtering._ui.filter as filters_ui
from bot import constants
from bot.bot import Bot
from bot.constants import BaseURLs, Channels, Guild, MODERATION_ROLES, Roles
from bot.constants import BaseURLs, Channels, Guild, MODERATION_ROLES, PaginationEmojis, Roles
from bot.exts.backend.branding._repository import HEADERS, PARAMS
from bot.exts.filtering._filter_context import Event, FilterContext
from bot.exts.filtering._filter_lists import FilterList, ListType, ListTypeConverter, filter_list_types
Expand All @@ -44,7 +45,6 @@
from bot.exts.moderation.infraction.infractions import COMP_BAN_DURATION, COMP_BAN_REASON
from bot.exts.utils.snekbox._io import FileAttachment
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils.channel import is_mod_channel
from bot.utils.lock import lock_arg
from bot.utils.message_cache import MessageCache
Expand Down Expand Up @@ -439,7 +439,9 @@ async def f_describe(self, ctx: Context, filter_name: str | None) -> None:
filter_names = [f"» {f}" for f in self.loaded_filters]
embed = Embed(colour=Colour.blue())
embed.set_author(name="List of filter names")
await LinePaginator.paginate(filter_names, ctx, embed, max_lines=10, empty=False)
await LinePaginator.paginate(
PaginationEmojis, filter_names, ctx, embed,
max_lines=10, empty=False, allowed_roles=MODERATION_ROLES)
else:
filter_type = self.loaded_filters.get(filter_name)
if not filter_type:
Expand Down Expand Up @@ -593,7 +595,10 @@ async def setting(self, ctx: Context, setting_name: str | None) -> None:
settings_list.extend(f"» {filter_name}/{setting}" for setting in filter_settings)
embed = Embed(colour=Colour.blue())
embed.set_author(name="List of setting names")
await LinePaginator.paginate(settings_list, ctx, embed, max_lines=10, empty=False)
await LinePaginator.paginate(
PaginationEmojis, settings_list, ctx, embed,
max_lines=10, empty=False, allowed_roles=MODERATION_ROLES
)

else:
# The setting is either in a SettingsEntry subclass, or a pydantic model.
Expand Down Expand Up @@ -644,7 +649,10 @@ async def f_match(
lines = lines[:-1] # Remove last newline.

embed = Embed(colour=Colour.blue(), title="Match results")
await LinePaginator.paginate(lines, ctx, embed, max_lines=10, empty=False)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx, embed,
max_lines=10, empty=False, allowed_roles=MODERATION_ROLES
)

@filter.command(name="search")
async def f_search(
Expand Down Expand Up @@ -743,7 +751,10 @@ async def fl_describe(
list_names = [f"» {fl}" for fl in self.filter_lists]
embed = Embed(colour=Colour.blue())
embed.set_author(name="List of filter lists names")
await LinePaginator.paginate(list_names, ctx, embed, max_lines=10, empty=False)
await LinePaginator.paginate(
PaginationEmojis, list_names, ctx, embed,
max_lines=10, empty=False, allowed_roles=MODERATION_ROLES
)
return

result = await self._resolve_list_type_and_name(ctx, list_type, list_name)
Expand Down Expand Up @@ -1065,7 +1076,10 @@ async def _send_list(ctx: Context, filter_list: FilterList, list_type: ListType)
embed = Embed(colour=Colour.blue())
embed.set_author(name=f"List of {filter_list[list_type].label}s ({len(lines)} total)")

await LinePaginator.paginate(lines, ctx, embed, max_lines=15, empty=False, reply=True)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx, embed,
max_lines=15, empty=False, reply=True, allowed_roles=MODERATION_ROLES
)

def _get_filter_by_id(self, id_: int) -> tuple[Filter, FilterList, ListType] | None:
"""Get the filter object corresponding to the provided ID, along with its containing list and list type."""
Expand Down Expand Up @@ -1342,7 +1356,10 @@ async def _search_filters(
embed = Embed(colour=Colour.blue())
embed.set_author(name=f"Search Results ({result_count} total)")
ctx = await bot.instance.get_context(message)
await LinePaginator.paginate(lines, ctx, embed, max_lines=15, empty=False, reply=True)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx, embed,
max_lines=15, empty=False, reply=True, allowed_roles=MODERATION_ROLES
)

async def _delete_offensive_msg(self, msg: Mapping[str, int]) -> None:
"""Delete an offensive message, and then delete it from the DB."""
Expand Down
13 changes: 9 additions & 4 deletions bot/exts/fun/off_topic_names.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
from discord.ext.commands import Cog, Context, group, has_any_role
from discord.ui import Button, View
from pydis_core.site_api import ResponseCodeError
from pydis_core import LinePaginator

from bot.bot import Bot
from bot.constants import Bot as BotConfig, Channels, MODERATION_ROLES, NEGATIVE_REPLIES
from bot.constants import Bot as BotConfig, Channels, MODERATION_ROLES, NEGATIVE_REPLIES, PaginationEmojis
from bot.converters import OffTopicName
from bot.log import get_logger
from bot.pagination import LinePaginator

CHANNELS = (Channels.off_topic_0, Channels.off_topic_1, Channels.off_topic_2)

Expand Down Expand Up @@ -87,7 +87,9 @@ async def list_ot_names(self, ctx: Context, active: bool = True) -> None:
colour=Colour.blue()
)
if result:
await LinePaginator.paginate(lines, ctx, embed, max_size=400, empty=False)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx, embed,
max_size=400, empty=False, allowed_roles=MODERATION_ROLES)
else:
embed.description = "Hmmm, seems like there's nothing here yet."
await ctx.send(embed=embed)
Expand Down Expand Up @@ -293,7 +295,10 @@ async def search_command(self, ctx: Context, *, query: OffTopicName) -> None:
)

if lines:
await LinePaginator.paginate(lines, ctx, embed, max_size=400, empty=False)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx, embed,
max_size=400, empty=False, allowed_roles=MODERATION_ROLES
)
else:
embed.description = "Nothing found."
await ctx.send(embed=embed)
Expand Down
9 changes: 6 additions & 3 deletions bot/exts/info/doc/_cog.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
from discord.ext import commands
from pydis_core.site_api import ResponseCodeError
from pydis_core.utils.scheduling import Scheduler
from pydis_core import LinePaginator

from bot.bot import Bot
from bot.constants import MODERATION_ROLES, RedirectOutput
from bot.constants import MODERATION_ROLES, PaginationEmojis, RedirectOutput
from bot.converters import Inventory, PackageName, ValidURL
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils.lock import SharedEvent, lock
from bot.utils.messages import send_denial, wait_for_deletion

Expand Down Expand Up @@ -327,7 +327,10 @@ async def get_command(self, ctx: commands.Context, *, symbol_name: str | None) -

lines = sorted(f"• [`{name}`]({url})" for name, url in self.base_urls.items())
if self.base_urls:
await LinePaginator.paginate(lines, ctx, inventory_embed, max_size=400, empty=False)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx,
inventory_embed, max_size=400, empty=False, allowed_roles=MODERATION_ROLES
)

else:
inventory_embed.description = "Hmmm, seems like there's nothing here yet."
Expand Down
21 changes: 15 additions & 6 deletions bot/exts/info/help.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@

from discord import ButtonStyle, Colour, Embed, Emoji, Interaction, PartialEmoji, ui
from discord.ext.commands import Bot, Cog, Command, CommandError, Context, DisabledCommand, Group, HelpCommand
from pydis_core import LinePaginator
from rapidfuzz import fuzz, process
from rapidfuzz.utils import default_process

from bot import constants
from bot.constants import Channels, STAFF_PARTNERS_COMMUNITY_ROLES
from bot.constants import Channels, PaginationEmojis, STAFF_PARTNERS_COMMUNITY_ROLES
from bot.decorators import redirect_output
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils.messages import wait_for_deletion

log = get_logger(__name__)
Expand Down Expand Up @@ -420,12 +420,14 @@ async def send_category_help(self, category: Category) -> None:
description += "\n\n**Commands:**"

await LinePaginator.paginate(
command_detail_lines,
self.context,
embed,
pagination_emojis=PaginationEmojis,
lines=command_detail_lines,
ctx=self.context,
embed=embed,
prefix=description,
max_lines=COMMANDS_PER_PAGE,
max_size=2000,
allowed_roles=constants.MODERATION_ROLES
)

async def send_bot_help(self, mapping: dict) -> None:
Expand Down Expand Up @@ -472,7 +474,14 @@ async def send_bot_help(self, mapping: dict) -> None:
# add any remaining command help that didn't get added in the last iteration above.
pages.append(page)

await LinePaginator.paginate(pages, self.context, embed=embed, max_lines=1, max_size=2000)
await LinePaginator.paginate(
pagination_emojis=PaginationEmojis,
lines=pages,
ctx=self.context,
embed=embed,
max_lines=1,
max_size=2000,
allowed_roles=constants.MODERATION_ROLES)


class Help(Cog):
Expand Down
13 changes: 10 additions & 3 deletions bot/exts/info/information.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@
from discord.ext.commands import BucketType, Cog, Context, Paginator, command, group, has_any_role
from discord.utils import escape_markdown
from pydis_core.site_api import ResponseCodeError
from pydis_core import LinePaginator

from bot import constants
from bot.bot import Bot
from bot.constants import PaginationEmojis
from bot.converters import MemberOrUser
from bot.decorators import in_whitelist
from bot.errors import NonExistentRoleError
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils import time
from bot.utils.channel import is_mod_channel, is_staff_channel
from bot.utils.checks import cooldown_with_role_bypass, has_no_roles_check, in_whitelist_check
Expand Down Expand Up @@ -131,7 +132,10 @@ async def roles_info(self, ctx: Context) -> None:
colour=Colour.og_blurple()
)

await LinePaginator.paginate(role_list, ctx, embed, empty=False)
await LinePaginator.paginate(
PaginationEmojis, role_list, ctx, embed,
empty=False, allowed_roles=constants.MODERATION_ROLES
)

@has_any_role(*constants.STAFF_PARTNERS_COMMUNITY_ROLES)
@command(name="role")
Expand Down Expand Up @@ -597,7 +601,10 @@ async def rules(self, ctx: Context, *, args: str | None) -> set[int] | None:
self.bot.stats.incr(f"rule_uses.{rule_number}")
final_rules.append(f"**{rule_number}.** {full_rules[rule_number - 1][0]}")

await LinePaginator.paginate(final_rules, ctx, rules_embed, max_lines=3)
await LinePaginator.paginate(
PaginationEmojis, final_rules, ctx, rules_embed,
max_lines=3, allowed_roles=constants.MODERATION_ROLES
)

return final_rule_numbers

Expand Down
12 changes: 9 additions & 3 deletions bot/exts/info/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
import frontmatter
from discord import Embed, Interaction, Member, app_commands
from discord.ext.commands import Cog, Context
from pydis_core import LinePaginator

from bot import constants
from bot.bot import Bot
from bot.constants import PaginationEmojis
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils.messages import wait_for_deletion

log = get_logger(__name__)
Expand Down Expand Up @@ -296,7 +297,9 @@ async def get_command_ctx(
# Try to find accessible tags from a group matching the identifier's name.
if group_tags := self.accessible_tags_in_group(identifier.name, ctx.author):
await LinePaginator.paginate(
group_tags, ctx, Embed(title=f"Tags under *{identifier.name}*"), **self.PAGINATOR_DEFAULTS
PaginationEmojis, group_tags, ctx,
Embed(title=f"Tags under *{identifier.name}*"), **self.PAGINATOR_DEFAULTS,
allowed_roles=constants.MODERATION_ROLES
)
return True

Expand Down Expand Up @@ -328,9 +331,11 @@ async def get_command(self, interaction: Interaction, *, name: str | None) -> bo
if not name:
if self.tags:
await LinePaginator.paginate(
PaginationEmojis,
self.accessible_tags(interaction.user),
interaction, Embed(title="Available tags"),
**self.PAGINATOR_DEFAULTS,
allowed_roles=constants.MODERATION_ROLES
)
else:
await interaction.response.send_message(embed=Embed(description="**There are no tags!**"))
Expand All @@ -342,7 +347,8 @@ async def get_command(self, interaction: Interaction, *, name: str | None) -> bo
# Try to find accessible tags from a group matching the identifier's name.
if group_tags := self.accessible_tags_in_group(identifier.name, interaction.user):
await LinePaginator.paginate(
group_tags, interaction, Embed(title=f"Tags under *{identifier.name}*"), **self.PAGINATOR_DEFAULTS
PaginationEmojis, group_tags, interaction,
Embed(title=f"Tags under *{identifier.name}*"), **self.PAGINATOR_DEFAULTS
)
return True

Expand Down
8 changes: 5 additions & 3 deletions bot/exts/moderation/infraction/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
from discord.ext import commands
from discord.ext.commands import Context
from discord.utils import escape_markdown
from pydis_core import LinePaginator

from bot import constants
from bot.bot import Bot
from bot.constants import Categories
from bot.constants import Categories, PaginationEmojis
from bot.converters import DurationOrExpiry, Infraction, MemberOrUser, Snowflake, UnambiguousUser
from bot.decorators import ensure_future_timestamp
from bot.errors import InvalidInfractionError
from bot.exts.moderation.infraction import _utils
from bot.exts.moderation.infraction.infractions import Infractions
from bot.exts.moderation.modlog import ModLog
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils import messages, time
from bot.utils.channel import is_in_category, is_mod_channel
from bot.utils.members import get_or_fetch_member
Expand Down Expand Up @@ -408,13 +408,15 @@ async def send_infraction_list(
lines = [self.infraction_to_string(infraction, ignore_fields) for infraction in infractions]

await LinePaginator.paginate(
PaginationEmojis,
lines,
ctx=ctx,
embed=embed,
prefix=f"{prefix}\n",
empty=True,
max_lines=3,
max_size=1000
max_size=1000,
allowed_roles = constants.MODERATION_ROLES
)

def infraction_to_string(self, infraction: dict[str, t.Any], ignore_fields: tuple[str, ...]) -> str:
Expand Down
9 changes: 6 additions & 3 deletions bot/exts/moderation/stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
from async_rediscache import RedisCache
from discord.ext import commands
from pydis_core.utils import scheduling
from pydis_core import LinePaginator

from bot.bot import Bot
from bot.constants import (
Colours, Emojis, Guild, MODERATION_ROLES, Roles, STAFF_PARTNERS_COMMUNITY_ROLES, VideoPermission
Colours, Emojis, Guild, MODERATION_ROLES, PaginationEmojis, Roles, STAFF_PARTNERS_COMMUNITY_ROLES, VideoPermission
)
from bot.converters import Expiry
from bot.log import get_logger
from bot.pagination import LinePaginator
from bot.utils import time
from bot.utils.members import get_or_fetch_member

Expand Down Expand Up @@ -226,7 +226,10 @@ async def liststream(self, ctx: commands.Context) -> None:
title=f"Members with streaming permission (`{len(lines)}` total)",
colour=Colours.soft_green
)
await LinePaginator.paginate(lines, ctx, embed, max_size=400, empty=False)
await LinePaginator.paginate(
PaginationEmojis, lines, ctx, embed,
max_size=400, empty=False, allowed_roles=MODERATION_ROLES
)
else:
await ctx.send("No members with stream permissions found.")

Expand Down
Loading