from typing import Any, List, Union, Optional

from nonebot.adapters import Bot as BaseBot
from nonebot.adapters import Adapter as Adapter

from .model import *
from .event import Event as Event
from .message import Message as Message
from .config import BotConfig as BotConfig
from .event import EventWithChat as EventWithChat
from .message import MessageSegment as MessageSegment

class Bot(BaseBot):
    adapter: Adapter
    self_id: str
    bot_config: BotConfig
    def __init__(self, adapter: Adapter, config: BotConfig) -> None: ...
    async def send(
        self, event: Event, message: Union[str, Message, MessageSegment], **kwargs
    ) -> Any: ...
    async def get_updates(
        self,
        offset: Optional[int],
        limit: Optional[int],
        timeout: Optional[int],
        allowed_updates: Optional[List[str]],
    ): ...
    async def set_webhook(
        self,
        url: str,
        certificate: Optional[InputFile],
        ip_address: Optional[str],
        max_connections: Optional[int],
        allowed_updates: Optional[List[str]],
        drop_pending_updates: Optional[bool],
    ): ...
    async def delete_webhook(self, drop_pending_updates: Optional[bool]): ...
    async def get_webhook_info(self): ...
    async def get_me(self):
        """
        :说明:
          用于测试机器人 Token 的 API
        :返回:
          * ``User``: 机器人本身的 User
        """
        ...
    async def log_out(self): ...
    async def close(self): ...
    async def send_message(
        self,
        chat_id: Union[int, str],
        text: str,
        parse_mode: Optional[str],
        entities: Optional[List[MessageEntity]],
        disable_web_page_preview: Optional[bool],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def forward_message(
        self,
        chat_id: Union[int, str],
        from_chat_id: Union[int, str],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        message_id: int,
    ): ...
    async def copy_message(
        self,
        chat_id: Union[int, str],
        from_chat_id: Union[int, str],
        message_id: int,
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_photo(
        self,
        chat_id: Union[int, str],
        photo: Union[InputFile, str],
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_audio(
        self,
        chat_id: Union[int, str],
        audio: Union[InputFile, str],
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        duration: Optional[int],
        performer: Optional[str],
        title: Optional[str],
        thumb: Optional[Union[InputFile, str]],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_document(
        self,
        chat_id: Union[int, str],
        document: Union[InputFile, str],
        thumb: Optional[Union[InputFile, str]],
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        disable_content_type_detection: Optional[bool],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_video(
        self,
        chat_id: Union[int, str],
        video: Union[InputFile, str],
        duration: Optional[int],
        width: Optional[int],
        height: Optional[int],
        thumb: Optional[Union[InputFile, str]],
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        support_streaming: Optional[bool],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_animation(
        self,
        chat_id: Union[int, str],
        animation: Union[InputFile, str],
        duration: Optional[int],
        width: Optional[int],
        height: Optional[int],
        thumb: Optional[Union[InputFile, str]],
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_voice(
        self,
        chat_id: Union[int, str],
        voice: Union[InputFile, str],
        caption: Optional[str],
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        duration: Optional[int],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_video_note(
        self,
        chat_id: Union[int, str],
        video_note: Union[InputFile, str],
        duration: Optional[int],
        length: Optional[int],
        thumb: Optional[Union[InputFile, str]],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_media_group(
        self,
        chat_id: Union[int, str],
        media: List[
            Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]
        ],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
    ): ...
    async def send_location(
        self,
        chat_id: Union[int, str],
        latitude: float,
        longitude: float,
        horizontal_accuracy: Optional[float],
        live_period: Optional[int],
        heading: Optional[int],
        proximity_alert_radius: Optional[int],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def edit_message_live_location(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        inline_message_id: Optional[int],
        latitude: float,
        longitude: float,
        horizontal_accuracy: Optional[float],
        heading: Optional[int],
        proximity_alert_radius: Optional[int],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def stop_message_live_location(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        inline_message_id: Optional[int],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_venue(
        self,
        chat_id: Union[int, str],
        latitude: float,
        longitude: float,
        title: str,
        address: str,
        foursquare_id: Optional[str],
        foursquare_type: Optional[str],
        google_place_id: Optional[str],
        google_place_type: Optional[str],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_contact(
        self,
        chat_id: Union[int, str],
        phone_number: str,
        first_name: str,
        last_name: Optional[str],
        vcard: Optional[str],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_poll(
        self,
        chat_id: Union[int, str],
        question: str,
        options: List[str],
        is_anonymous: Optional[bool],
        type: Optional[str],
        allows_multiple_answers: Optional[bool],
        correct_option_id: Optional[int],
        explanation: Optional[str],
        explanation_parse_mode: Optional[str],
        explanation_entities: Optional[List[MessageEntity]],
        open_period: Optional[int],
        close_date: Optional[int],
        is_closed: Optional[bool],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_dice(
        self,
        chat_id: Union[int, str],
        emoji: Optional[str],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def send_chat_action(self, chat_id: Union[int, str], action: str): ...
    async def get_user_profile_photos(
        self, user_id: int, offset: Optional[int], limit: Optional[int]
    ): ...
    async def get_file(self, file_id: str): ...
    async def ban_chat_member(
        self,
        chat_id: Union[int, str],
        user_id: int,
        until_date: Optional[int],
        revoke_messages: Optional[bool],
    ): ...
    async def unban_chat_member(
        self, chat_id: Union[int, str], user_id: int, only_if_banned: Optional[bool]
    ): ...
    async def promote_chat_member(
        self,
        chat_id: Union[int, str],
        user_id: int,
        is_anonymous: Optional[bool],
        can_manage_chat: Optional[bool],
        can_post_messages: Optional[bool],
        can_edit_messages: Optional[bool],
        can_delete_messages: Optional[bool],
        can_manage_voice_chats: Optional[bool],
        can_restrict_members: Optional[bool],
        can_promote_members: Optional[bool],
        can_change_info: Optional[bool],
        can_invite_users: Optional[bool],
        can_pin_messages: Optional[bool],
    ): ...
    async def set_chat_administrator_custom_title(
        self, chat_id: Union[int, str], user_id: int, custom_title: str
    ): ...
    async def ban_chat_sender_chat(
        self, chat_id: Union[int, str], sender_chat_id: int
    ): ...
    async def unban_chat_sender_chat(
        self, chat_id: Union[int, str], sender_chat_id: int
    ): ...
    async def set_chat_permissions(
        self, chat_id: Union[int, str], permissions: ChatPermissions
    ): ...
    async def export_chat_invite_link(self, chat_id: Union[int, str]): ...
    async def create_chat_invite_link(
        self,
        chat_id: Union[int, str],
        name: Optional[str],
        expire_date: Optional[int],
        member_limit: Optional[int],
        creates_join_request: Optional[bool],
    ): ...
    async def edit_chat_invite_link(
        self,
        chat_id: Union[int, str],
        invite_link: str,
        name: Optional[str],
        expire_date: Optional[int],
        member_limit: Optional[int],
        creates_join_request: Optional[bool],
    ): ...
    async def revoke_chat_invite_link(
        self, chat_id: Union[int, str], invite_link: str
    ): ...
    async def approve_chat_join_request(
        self, chat_id: Union[int, str], user_id: int
    ): ...
    async def decline_chat_join_request(
        self, chat_id: Union[int, str], user_id: int
    ): ...
    async def set_chat_photo(self, chat_id: Union[int, str], photo: InputFile): ...
    async def delete_chat_photo(self, chat_id: Union[int, str]): ...
    async def set_chat_title(self, chat_id: Union[int, str], title: str): ...
    async def set_chat_description(
        self, chat_id: Union[int, str], description: Optional[str]
    ): ...
    async def pin_chat_message(
        self,
        chat_id: Union[int, str],
        message_id: int,
        disable_notification: Optional[bool],
    ): ...
    async def unpin_chat_message(
        self, chat_id: Union[int, str], message_id: Optional[int]
    ): ...
    async def unpin_all_chat_messages(self, chat_id: Union[int, str]): ...
    async def leave_chat(self, chat_id: Union[int, str]): ...
    async def get_chat(self, chat_id: Union[int, str]): ...
    async def get_chat_administrators(self, chat_id: Union[int, str]): ...
    async def get_chat_member_count(self, chat_id: Union[int, str]): ...
    async def get_chat_member(self, chat_id: Union[int, str], user_id: int): ...
    async def set_chat_sticker_set(
        self, chat_id: Union[int, str], sticker_set_name: str
    ): ...
    async def delete_chat_sticker_set(self, chat_id: Union[int, str]): ...
    async def answer_callback_query(
        self,
        callback_query_id: str,
        text: Optional[str],
        show_alert: Optional[bool],
        url: Optional[str],
        cache_time: Optional[int],
    ): ...
    async def set_my_commands(
        self,
        commands: List[BotCommand],
        scope: Optional[BotCommandScope],
        language_code: Optional[str],
    ): ...
    async def delete_my_commands(
        self, scope: Optional[BotCommandScope], language_code: Optional[str]
    ): ...
    async def get_my_commands(
        self, scope: Optional[BotCommandScope], language_code: Optional[str]
    ): ...
    async def edit_message_text(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        inline_message_id: Optional[str],
        text: str,
        parse_mode: Optional[str],
        entities: Optional[List[MessageEntity]],
        disable_web_page_preview: Optional[bool],
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def edit_message_caption(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        inline_message_id: Optional[str],
        caption: str,
        parse_mode: Optional[str],
        caption_entities: Optional[List[MessageEntity]],
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def edit_message_media(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        inline_message_id: Optional[str],
        media: InputMedia,
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def edit_message_reply_markup(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        inline_message_id: Optional[str],
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def stop_poll(
        self,
        chat_id: Optional[Union[int, str]],
        message_id: Optional[int],
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def delete_message(
        self, chat_id: Optional[Union[int, str]], message_id: Optional[int]
    ): ...
    async def send_sticker(
        self,
        chat_id: Union[int, str],
        sticker: Union[InputFile, str],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[
            Union[
                InlineKeyboardMarkup,
                ReplyKeyboardMarkup,
                ReplyKeyboardRemove,
                ForceReply,
            ]
        ],
    ): ...
    async def get_sticker_set(self, name: str): ...
    async def upload_sticker_file(self, user_id: int, png_sticker: InputFile): ...
    async def create_new_sticker_set(
        self,
        user_id: int,
        name: str,
        title: str,
        png_sticker: Optional[Union[InputFile, str]],
        tgs_sticker: Optional[InputFile],
        emojis: str,
        contains_masks: Optional[bool],
        mask_potion: Optional[MaskPosition],
    ): ...
    async def add_sticker_to_set(
        self,
        user_id: int,
        name: str,
        png_sticker: Optional[Union[InputFile, str]],
        tgs_sticker: Optional[InputFile],
        emojis: str,
        mask_potion: Optional[MaskPosition],
    ): ...
    async def set_sticker_position_in_set(self, sticker: str, position: int): ...
    async def delete_sticker_from_set(self, sticker: str): ...
    async def set_sticker_set_thumb(
        self, name: str, user_id: int, thumb: Optional[Union[InputFile, str]]
    ): ...
    async def answer_inline_query(
        self,
        inline_query_id: str,
        results: List[InlineQueryResult],
        cache_time: Optional[int],
        is_personal: Optional[bool],
        next_offset: Optional[str],
        switch_pm_text: Optional[str],
        switch_pm_parameter: Optional[str],
    ): ...
    async def send_invoice(
        self,
        chat_id: Union[int, str],
        title: str,
        description: str,
        payload: str,
        provider_token: str,
        prices: List[LabeledPrice],
        max_tip_amount: Optional[int],
        suggested_tip_amounts: Optional[int],
        start_parameter: Optional[str],
        provider_date: Optional[str],
        photo_url: Optional[str],
        photo_size: Optional[int],
        photo_width: Optional[int],
        photo_height: Optional[int],
        need_name: Optional[bool],
        need_phone_number: Optional[bool],
        need_email: Optional[bool],
        need_shipping_address: Optional[bool],
        send_phone_number_to_provider: Optional[bool],
        send_email_to_provider: Optional[bool],
        is_flexible: Optional[bool],
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def answer_shipping_query(
        self,
        shipping_query_id: str,
        ok: bool,
        shipping_options: Optional[List[ShippingOption]],
        error_message: Optional[str],
    ): ...
    async def answer_pre_checkout_query(
        self, pre_checkout_query_id: str, ol: bool, error_message: Optional[str]
    ): ...
    async def set_passport_data_errors(
        self, user_id: int, errors: List[PassportElementError]
    ): ...
    async def send_game(
        self,
        chat_id: int,
        game_short_name: str,
        disable_notification: Optional[bool],
        protect_content: Optional[bool],
        reply_to_message_id: Optional[int],
        allow_sending_without_reply: Optional[bool],
        reply_markup: Optional[InlineKeyboardMarkup],
    ): ...
    async def set_game_score(
        self,
        user_id: int,
        score: int,
        force: Optional[bool],
        disable_edit_message: Optional[bool],
        chat_id: Optional[int],
        message_id: Optional[int],
        inline_message_id: Optional[str],
    ): ...
    async def get_game_high_score(
        self,
        user_id: int,
        chat_id: Optional[int],
        message_id: Optional[int],
        inline_message_id: Optional[str],
    ): ...
