コード例 #1
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_task_control(
        is_new_task: bool = False) -> InlineKeyboardMarkup:
    choice = InlineKeyboardMarkup(row_width=1)

    choice.insert(
        InlineKeyboardButton(text="Добавить файл",
                             callback_data=CallbackData(
                                 "task_control",
                                 "action").new(action="add_file")))

    choice.insert(
        InlineKeyboardButton(text="Добавить комментарий",
                             callback_data=CallbackData(
                                 "task_control",
                                 "action").new(action="add_comment")))
    if is_new_task is False:
        choice.insert(
            InlineKeyboardButton(text="Список комментариев",
                                 callback_data=CallbackData(
                                     "task_control",
                                     "action").new(action="list_comment")))

    choice.insert(
        InlineKeyboardButton(text="Выход",
                             callback_data=CallbackData(
                                 "task_control",
                                 "action").new(action="cancel")))

    return choice
コード例 #2
0
    async def test_cb_zero(self):
        cb = CallbackData('zero')
        assert cb.new() == 'zero'

        assert (await cb.filter().check(CallbackQuery(data='zero'))) == {
            'callback_data': {
                '@': 'zero'
            }
        }
        assert (await cb.filter().check(CallbackQuery(data='zero:'))) is False
        assert (await cb.filter().check(CallbackQuery(data='bla'))) is False
コード例 #3
0
def create_coeff_leagues_keyboard(callback: CallbackData):
    country_keyboard = InlineKeyboardMarkup(row_width=1)
    for league in coeff_manager.get_leagues():
        country_keyboard.insert(InlineKeyboardButton(
            text=str(coeff_manager.emojize_league(league) + ' ' + coeff_manager.translate_league(league)),
            callback_data=callback.new(league_name=league, round="cur")
        ))
    country_keyboard.insert(InlineKeyboardButton(
        text=emojize(":leftwards_arrow_with_hook: Назад"), 
        callback_data=callback.new(league_name="cancel", round="cur")
    ))
    return country_keyboard
コード例 #4
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_check_data() -> InlineKeyboardMarkup:
    choice = InlineKeyboardMarkup(row_width=1)

    choice.insert(
        InlineKeyboardButton(text="Создать",
                             callback_data=CallbackData(
                                 "create_task",
                                 "action").new(action="Создать")))
    choice.insert(
        InlineKeyboardButton(text="Отменить",
                             callback_data=CallbackData(
                                 "create_task",
                                 "action").new(action="Отменить")))

    return choice
コード例 #5
0
def create_player_back_keyboard(callback: CallbackData):
    player_back_keyboard = InlineKeyboardMarkup(row_width=1)
    player_back_button = InlineKeyboardButton(
        text=emojize(":leftwards_arrow_with_hook: Назад"),
        callback_data=callback.new(league_name="back_to_list"))
    player_back_keyboard.add(player_back_button)
    return player_back_keyboard
コード例 #6
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_add_files() -> InlineKeyboardMarkup:
    choice = InlineKeyboardMarkup(row_width=1)

    choice.insert(
        InlineKeyboardButton(text="Добавить еще",
                             callback_data=CallbackData(
                                 "task_control",
                                 "action").new(action="add_file")))

    choice.insert(
        InlineKeyboardButton(text="Выход",
                             callback_data=CallbackData(
                                 "task_control",
                                 "action").new(action="cancel")))

    return choice
コード例 #7
0
 def __init__(self):
     self.parent = EnglishWordMenu()
     self.data = (
         ('back', 'back'),
         ('ready', 'ready'),
     )
     self.prefix = 'EnglishWordMenuEnterRussianWord'
     self.callback_data = CallbackData(self.prefix, 'action')
コード例 #8
0
class CalendarMultiNotification:
    cd = CallbackData('es', 'ids', 'action')

    @staticmethod
    def encode_ids(episodes: List[int]):
        ids = [compress_int(id) for id in episodes]
        return ','.join(ids) or '-'

    @staticmethod
    def decode_ids(ids: str):
        if ids == '-':
            return []
        ids = ids.split(',')
        ids = [decompress_int(id) for id in ids]
        return ids

    @classmethod
    async def markup(cls,
                     se: ShowEpisode,
                     episodes_ids: List[int],
                     watched: bool,
                     index=0):
        prev_ids = cls.encode_ids(episodes_ids[:index])
        cur_id = cls.encode_ids(episodes_ids[index:index + 1])
        next_ids = cls.encode_ids(episodes_ids[index + 1:])
        mark = '✅' if watched else '❌'
        row = [
            IKB('👈️' if index > 0 else '🤛',
                callback_data=cls.cd.new(ids=prev_ids, action='prev')),
            IKB(f'{mark} {se.episode.season}x{se.episode.number}',
                callback_data=cls.cd.new(ids=cur_id, action='watch')),
            IKB('👉' if index < len(episodes_ids) - 1 else '🤜',
                callback_data=cls.cd.new(ids=next_ids, action='next')),
        ]
        kb = InlineKeyboardMarkup(inline_keyboard=[row])
        if not watched:
            kb.add(*[
                IKB(source, url=str(url))
                async for source, url in watch_urls(se.show, se.episode)
            ])
        return kb

    @classmethod
    async def send(cls, bot: Bot, trakt: TraktClient, storage: Storage,
                   user_id: str, episodes: List[CalendarEpisode]):
        first = episodes[0]
        text = rendering.render_html(
            'calendar_multi_notification',
            show=first.show,
            episodes=episodes,
        )
        creds = await storage.get_creds(user_id)
        sess = trakt.auth(creds.access_token)
        watched = await sess.watched(first.episode.id)
        episodes_ids = [cs.episode.id for cs in episodes]
        keyboard_markup = await cls.markup(first, episodes_ids, watched)
        await bot.send_message(user_id, text, reply_markup=keyboard_markup)
コード例 #9
0
def create_coeff_back_keyboard(callback: CallbackData, league_name: str, cur_round: bool):
    coeff_back_keyboard = InlineKeyboardMarkup(row_width=2)
    coeff_back_button = InlineKeyboardButton(
        text=emojize(":leftwards_arrow_with_hook: Назад"),
        callback_data=callback.new(league_name="back_to_list", round="cur")
    )
    if cur_round:
        coeff_round_button = InlineKeyboardButton(
            text=emojize("➡️ Cледующий тур"),
            callback_data=callback.new(league_name=league_name, round="next")
        )
    else:
        coeff_round_button = InlineKeyboardButton(
            text=emojize("⬅️ Текущий тур"),
            callback_data=callback.new(league_name=league_name, round="cur")
        )
    coeff_back_keyboard.add(coeff_back_button, coeff_round_button)
    return coeff_back_keyboard
コード例 #10
0
 def __init__(self):
     self.parent = None
     self.data = (
         ('englishword', 'English word'),
         ('russianword', 'Russian word'),
         ('myvocabulary', 'My vocabulary'),
     )
     self.prefix = 'MainMenu'
     self.callback_data = CallbackData(self.prefix, 'action')
コード例 #11
0
def create_sources_back_keyboard(callback: CallbackData):
    sources_back_keyboard = InlineKeyboardMarkup(row_width=1)
    sources_back_button = InlineKeyboardButton(
        text=emojize(":leftwards_arrow_with_hook: Назад"),
        callback_data=callback.new(league_name="back_to_list",
                                   name="None",
                                   url="None",
                                   action="None"))
    sources_back_keyboard.add(sources_back_button)
    return sources_back_keyboard
コード例 #12
0
def create_sources_league_keyboard(callback: CallbackData, league_name: str):
    league_keyboard = InlineKeyboardMarkup(row_width=1)

    sources_add_button = InlineKeyboardButton(
        text=emojize(":newspaper: Добавить источник"),
        callback_data=callback.new(league_name=league_name, action="add"))
    league_keyboard.add(sources_add_button)

    sources_delete_button = InlineKeyboardButton(
        text=emojize(":wastebasket: Удалить источник"),
        callback_data=callback.new(league_name=league_name, action="delete"))
    league_keyboard.add(sources_delete_button)

    sources_back_button = InlineKeyboardButton(
        text=emojize(":leftwards_arrow_with_hook: Назад"),
        callback_data=callback.new(league_name="back_to_list", action="None"))
    league_keyboard.add(sources_back_button)

    return league_keyboard
コード例 #13
0
    async def test_cb(self):
        cb = CallbackData('simple', 'action')
        assert cb.new('x') == 'simple:x'
        assert cb.new(action='y') == 'simple:y'
        assert cb.new('') == 'simple:'

        assert (await cb.filter().check(CallbackQuery(data='simple:'))) == {
            'callback_data': {
                '@': 'simple',
                'action': ''
            }
        }
        assert (await cb.filter().check(CallbackQuery(data='simple:x'))) == {
            'callback_data': {
                '@': 'simple',
                'action': 'x'
            }
        }
        assert (await cb.filter(action='y').check(
            CallbackQuery(data='simple:x'))) is False
コード例 #14
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_tags(tags: list) -> dict:
    choice = InlineKeyboardMarkup(row_width=1)

    for tag in tags:
        choice.insert(
            InlineKeyboardButton(text=tag[1],
                                 callback_data=CallbackData(
                                     "tags", "name").new(name=tag[0])))

    return dict(response="Список тегов (Выбор нескольких вариантов):",
                keyboards=choice)
コード例 #15
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_priority(priorities: list) -> dict:
    choice = InlineKeyboardMarkup(row_width=1)

    for priority in priorities:
        choice.insert(
            InlineKeyboardButton(text=priority[1],
                                 callback_data=CallbackData(
                                     "priorities",
                                     "name").new(name=priority[0])))

    return dict(response="Список приоритетов:", keyboards=choice)
コード例 #16
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_lists(folder: FolderData) -> dict:
    choice = InlineKeyboardMarkup(row_width=3)
    for folder_list in folder.lists:
        choice.insert(
            InlineKeyboardButton(text=folder_list.name,
                                 callback_data=CallbackData(
                                     "lists", "id",
                                     "name").new(id=folder_list.id,
                                                 name=folder_list.name)))

    return dict(folder_name=folder.name, keyboards=choice)
コード例 #17
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_task_status() -> InlineKeyboardMarkup:
    choice = InlineKeyboardMarkup(row_width=3)

    for x in ClickUpTaskStatusType:
        choice.insert(
            InlineKeyboardButton(text=x.preview_name,
                                 callback_data=CallbackData(
                                     "task_status",
                                     "task_group").new(task_group=x.value)))

    return choice
コード例 #18
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_folders(
        data: SpaceData) -> InlineKeyboardMarkup:
    choice = InlineKeyboardMarkup(row_width=1)
    for folder in data.folders:
        choice.insert(
            InlineKeyboardButton(text=folder.name[:128],
                                 callback_data=CallbackData(
                                     "folders", "id",
                                     "name").new(id=folder.id,
                                                 name=folder.name[:128])))

    return choice
コード例 #19
0
class Markups:
    cb = CallbackData('dialog', 'id', 'action')

    @classmethod
    async def dialogs_keyboard(cls,
                               client: TelegramClient) -> InlineKeyboardMarkup:
        markup = InlineKeyboardMarkup()

        d: Dialog
        async for d in client.iter_dialogs():
            button = InlineKeyboardButton(d.title,
                                          callback_data=cls.cb.new(id=d.id,
                                                                   action='s'))
            markup.insert(button)

        return markup
コード例 #20
0
class CalendarNotification:
    cd = CallbackData('e', 'id', 'watched')

    @classmethod
    async def markup(cls, se: ShowEpisode, watched: bool, hide: bool):
        mark = '✅' if watched else '❌'
        cd = cls.cd.new(id=se.episode.ids.trakt,
                        watched='1' if watched else '0')
        watch_btn = IKB(f'{mark} watched', callback_data=cd)

        kb = InlineKeyboardMarkup(row_width=5, inline_keyboard=[[watch_btn]])
        if not hide or not watched:
            kb.add(*[
                IKB(source, url=str(url))
                async for source, url in watch_urls(se.show, se.episode)
            ])
        return kb

    @classmethod
    async def send(cls,
                   bot: Bot,
                   trakt: TraktClient,
                   storage: Storage,
                   user_id,
                   se: ShowEpisode,
                   watched: bool = None):
        text = rendering.render_html(
            'calendar_notification',
            show_episode=se,
        )
        creds, user_pref = await asyncio.gather(
            storage.get_creds(user_id),
            storage.get_pref(user=user_id),
        )
        on_watch = user_pref.get('on_watch', 'hide')
        sess = trakt.auth(creds.access_token)
        if watched is None:
            watched = await sess.watched(se.episode.id)
        if watched and on_watch == 'delete':
            return
        keyboard_markup = await cls.markup(se,
                                           watched=watched,
                                           hide=on_watch == 'hide')
        await bot.send_message(user_id,
                               text,
                               reply_markup=keyboard_markup,
                               disable_web_page_preview=watched)
コード例 #21
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_members(members: UserGroups) -> list:
    choices = []

    for group, values in members.dict().items():
        choice = InlineKeyboardMarkup(row_width=2)

        for member in values:
            choice.insert(
                InlineKeyboardButton(text=member['username'],
                                     callback_data=CallbackData(
                                         "assigned", "id", "username").new(
                                             id=member['id'],
                                             username=member['username'])))
        preview_name = getattr(Teams, group).preview_name if getattr(
            Teams, group) else "Неизвестно"
        choices.append(dict(member_group=preview_name, keyboards=choice))

    return choices
コード例 #22
0
ファイル: tasks.py プロジェクト: AlexDemure/telegram
def generate_inline_buttons_for_click_up_spaces(data: ClickUpData) -> list:
    choices = []
    for team in data.teams:
        choice = InlineKeyboardMarkup(row_width=1)
        for space in team.spaces:
            try:
                choice.insert(
                    InlineKeyboardButton(text=space.name[:128],
                                         callback_data=CallbackData(
                                             "spaces", "id", "name").new(
                                                 id=space.id,
                                                 name=space.name[:128])))
            except Exception:
                logging.error(f"Callback is wrong:{space.dict()}")
                continue

        choices.append(dict(team_name=team.name, keyboards=choice))

    return choices
コード例 #23
0
    async def test_cb_double(self):
        cb = CallbackData('double', 'pid', 'action')
        assert cb.new('123', 'x') == 'double:123:x'
        assert cb.new(pid=456, action='y') == 'double:456:y'
        assert cb.new('', 'z') == 'double::z'
        assert cb.new('789', '') == 'double:789:'

        assert (await cb.filter().check(CallbackQuery(data='double::'))) == {
            'callback_data': {
                '@': 'double',
                'pid': '',
                'action': ''
            }
        }
        assert (await cb.filter().check(CallbackQuery(data='double:x:'))) == {
            'callback_data': {
                '@': 'double',
                'pid': 'x',
                'action': ''
            }
        }
        assert (await cb.filter().check(CallbackQuery(data='double::y'))) == {
            'callback_data': {
                '@': 'double',
                'pid': '',
                'action': 'y'
            }
        }
        assert (await
                cb.filter(action='x').check(CallbackQuery(data='double:123:x')
                                            )) == {
                                                'callback_data': {
                                                    '@': 'double',
                                                    'pid': '123',
                                                    'action': 'x'
                                                }
                                            }
コード例 #24
0
from aiogram.utils.callback_data import CallbackData

promo_callback = CallbackData("promo", "command")
コード例 #25
0
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils.callback_data import CallbackData

buying_item = CallbackData("buy", "id")
show_item = CallbackData("show", "id")


def buy_keyboard(item_id):
    keyboard = InlineKeyboardMarkup(inline_keyboard=[[
        InlineKeyboardButton(text="Купить",
                             callback_data=buying_item.new(id=item_id))
    ]])
    return keyboard


def show_keyboard(item_id):
    keyboard = InlineKeyboardMarkup(inline_keyboard=[[
        InlineKeyboardButton(text="Показать товар",
                             callback_data=show_item.new(id=item_id))
    ]])
    return keyboard
コード例 #26
0
ファイル: callback_data.py プロジェクト: itcosplay/cryptobot
from aiogram.utils.callback_data import CallbackData

group_users_data = CallbackData('gud', 'group', 'handler')

change_button_data = CallbackData(
    'change_button',
    'user_id',
    # 'user_name',
    # 'user_status',
    'type_button')

set_status_data = CallbackData(
    'ssb',
    'id',
    # 'user_name',
    'new_st',
    'type_btn')
コード例 #27
0
from aiogram.utils.callback_data import CallbackData
from aiogram.utils.exceptions import MessageNotModified

from DaisyX.decorator import register
from DaisyX.services.mongo import db

from .utils.language import (
    LANGUAGES,
    change_chat_lang,
    get_chat_lang_info,
    get_strings,
    get_strings_dec,
)
from .utils.message import get_arg

select_lang_cb = CallbackData("select_lang_cb", "lang", "back_btn")
translators_lang_cb = CallbackData("translators_lang_cb", "lang")


@register(cmds="lang", no_args=True, user_can_change_info=True)
async def select_lang_cmd(message):
    await select_lang_keyboard(message)


@get_strings_dec("language")
async def select_lang_keyboard(message, strings, edit=False):
    markup = InlineKeyboardMarkup(row_width=2)
    task = message.reply if edit is False else message.edit_text

    lang_info = await get_chat_lang_info(message.chat.id)
コード例 #28
0
from aiogram.utils.callback_data import CallbackData

reg_callback = CallbackData("reg", "bool")
コード例 #29
0
from aiogram.utils.callback_data import CallbackData
from babel.dates import format_timedelta

from DaisyX import dp
from DaisyX.decorator import register
from DaisyX.modules.utils.connections import chat_connection
from DaisyX.modules.utils.language import get_strings, get_strings_dec
from DaisyX.modules.utils.message import convert_time, get_args, need_args_dec
from DaisyX.modules.utils.restrictions import ban_user, kick_user, mute_user
from DaisyX.modules.utils.user_details import get_user_link, is_user_admin
from DaisyX.services.mongo import db
from DaisyX.services.redis import bredis, redis
from DaisyX.utils.cached import cached
from DaisyX.utils.logger import log

cancel_state = CallbackData("cancel_state", "user_id")


class AntiFloodConfigState(StatesGroup):
    expiration_proc = State()


@dataclass
class CacheModel:
    count: int


class AntifloodEnforcer(BaseMiddleware):
    state_cache_key = "floodstate:{chat_id}"

    async def enforcer(self, message: Message, database: dict):
コード例 #30
0
from bson.objectid import ObjectId
from pymongo import UpdateOne

from DaisyX import bot, loop
from DaisyX.decorator import register
from DaisyX.modules import LOADED_MODULES
from DaisyX.services.mongo import db
from DaisyX.services.redis import redis
from DaisyX.utils.logger import log

from .utils.connections import chat_connection, get_connected_chat
from .utils.language import get_string, get_strings_dec
from .utils.message import get_args_str, need_args_dec
from .utils.user_details import is_chat_creator, is_user_admin

filter_action_cp = CallbackData("filter_action_cp", "filter_id")
filter_remove_cp = CallbackData("filter_remove_cp", "id")
filter_delall_yes_cb = CallbackData("filter_delall_yes_cb", "chat_id")

FILTERS_ACTIONS = {}


class NewFilter(StatesGroup):
    handler = State()
    setup = State()


async def update_handlers_cache(chat_id):
    redis.delete(f"filters_cache_{chat_id}")
    filters = db.filters.find({"chat_id": chat_id})
    handlers = []