mi.note のソースコード

from __future__ import annotations

from typing import Any, Dict, List, Optional, TYPE_CHECKING, Union

from mi import utils
from mi.drive import File
from mi.emoji import Emoji
from mi.exception import NotExistRequiredData
from mi.models.note import RawNote, RawReaction, RawRenote
from mi.models.poll import RawPoll
from mi.models.user import RawUser
from mi.user import User
from .abc.note import AbstractNote
from .models.reaction import RawNoteReaction

if TYPE_CHECKING:
    from mi import ConnectionState
    from mi.state import NoteActions
    from mi.api.reaction import ReactionManager

__all__ = ('Note', 'Poll', 'Reaction', 'Follow', 'Header', 'File', 'Renote', 'NoteReaction')


[ドキュメント]class Follow: def __init__(self, data, state: ConnectionState): self.id: Optional[str] = data.get('id') self.created_at: Optional[str] = data.get('created_at') self.type: Optional[str] = data.get('type') self.user: Optional[User] = data.get('user') self._state = state
[ドキュメント] async def follow(self) -> tuple[bool, Optional[str]]: """ ユーザーをフォローします Returns ------- bool 成功ならTrue, 失敗ならFalse str 実行に失敗した際のエラーコード """ if self.id: raise NotExistRequiredData('user_idがありません') return await self._state.user.follow.add(user_id=self.id)
[ドキュメント] async def unfollow(self, user_id: Optional[str] = None) -> bool: """ 与えられたIDのユーザーのフォローを解除します Parameters ---------- user_id : Optional[str] = None フォローを解除したいユーザーのID Returns ------- status 成功ならTrue, 失敗ならFalse """ if user_id is None: user_id = self.user.id return await self._state.user.follow.remove(user_id)
class Poll: def __init__(self, raw_data: RawPoll): self.__raw_data = raw_data @property def multiple(self): return self.__raw_data.multiple @property def expires_at(self): return self.__raw_data.expires_at @property def choices(self): return self.__raw_data.choices @property def expired_after(self): return self.__raw_data.expired_after
[ドキュメント]class Renote(AbstractNote): def __init__(self, raw_data: RawRenote, state: ConnectionState): self.__raw_data: RawRenote = raw_data self.__state = state @property def id(self) -> str: return self.__raw_data.id @property def created_at(self): return self.__raw_data.created_at @property def user_id(self): return self.__raw_data.user_id @property def user(self): return User(self.__raw_data.user, state=self.__state) @property def content(self): return self.__raw_data.content @property def cw(self): return self.__raw_data.cw @property def visibility(self): return self.__raw_data.visibility @property def renote_count(self): return self.__raw_data.renote_count @property def replies_count(self): return self.__raw_data.replies_count @property def reactions(self): return self.__raw_data.reactions @property def emojis(self): return self.__raw_data.emojis @property def file_ids(self): return self.__raw_data.file_ids @property def files(self): return self.__raw_data.files @property def reply_id(self): return self.__raw_data.reply_id @property def renote_id(self): return self.__raw_data.renote_id @property def uri(self): return self.__raw_data.uri @property def poll(self) -> Union[Poll, None]: return Poll(self.__raw_data.poll) if self.__raw_data.poll else None
[ドキュメント] def emoji_count(self) -> int: """ ノートの本文にemojiが何個含まれているかを返します Returns ------- int 含まれている絵文字の数 """ return utils.emoji_count(self.__raw_data.content)
async def delete(self) -> bool: return await self.__state.delete_note(self.__raw_data.id)
class NoteReaction: def __init__(self, raw_data: RawNoteReaction, state: ConnectionState): self.__raw_data = raw_data self.__state = state @property def id(self) -> str: return self.__raw_data.id @property def created_at(self) -> str: return self.__raw_data.created_at @property def user(self) -> User: return User(RawUser(self.__raw_data.user), state=self.__state) @property def reaction(self) -> str: return self.__raw_data.reaction
[ドキュメント]class Reaction: def __init__(self, raw_data: RawReaction, state: ConnectionState): self.__raw_data = raw_data self.__state: ConnectionState = state @property def id(self) -> Optional[str]: return self.__raw_data.id @property def created_at(self) -> Optional[str]: return self.__raw_data.created_at @property def type(self) -> Optional[str]: return self.__raw_data.type @property def is_read(self) -> bool: return self.__raw_data.is_read @property def user(self) -> Optional[User]: return User(self.__raw_data.user, state=self.__state) if self.__raw_data.user else None @property def note(self) -> Optional[Note]: return Note(self.__raw_data.note, state=self.__state) if self.__raw_data.note else None @property def reaction(self) -> str: return self.__raw_data.reaction @property def action(self) -> ReactionManager: return self.__state.reaction
[ドキュメント]class Note(AbstractNote): def __init__(self, raw_data: RawNote, state: ConnectionState): self.__raw_data: RawNote = raw_data self.__state: ConnectionState = state @property def id(self) -> str: return self.__raw_data.id @property def created_at(self) -> str: return self.__raw_data.created_at @property def user_id(self) -> str: return self.__raw_data.user_id @property def author(self) -> User: return User(self.__raw_data.author, state=self.__state) @property def content(self) -> Optional[str]: return self.__raw_data.content @property def cw(self) -> Optional[str]: return self.__raw_data.cw @property def renote(self) -> Union[None, Renote]: return Renote(self.__raw_data.renote, state=self.__state) if self.__raw_data.renote else None @property def visibility(self) -> Optional[str]: return self.__raw_data.visibility @property def renote_count(self) -> Optional[int]: return self.__raw_data.renote_count @property def replies_count(self) -> Optional[int]: return self.__raw_data.replies_count @property def reactions(self) -> Optional[Dict[str, Any]]: # TODO: 型の確認 return self.__raw_data.reactions @property def emojis(self) -> List[Emoji]: return [Emoji(i, state=self.__state) for i in self.__raw_data.emojis] @property def file_ids(self) -> Optional[List[str]]: return self.__raw_data.file_ids @property def files(self) -> List[File]: return [File(i, state=self.__state) for i in self.__raw_data.files] @property def reply_id(self) -> Optional[str]: return self.__raw_data.reply_id @property def renote_id(self) -> Optional[str]: return self.__raw_data.renote_id @property def poll(self) -> Union[Poll, None]: return Poll(self.__raw_data.poll) if self.__raw_data.poll else None @property def visible_user_ids(self) -> Optional[List[str]]: return self.__raw_data.visible_user_ids @property def via_mobile(self) -> bool: return self.__raw_data.via_mobile @property def local_only(self) -> bool: return self.__raw_data.local_only @property def extract_mentions(self) -> bool: return self.__raw_data.extract_mentions @property def extract_hashtags(self) -> bool: return self.__raw_data.extract_hashtags @property def extract_emojis(self) -> bool: return self.__raw_data.extract_emojis @property def preview(self) -> bool: return self.__raw_data.preview @property def media_ids(self) -> Optional[List[str]]: return self.__raw_data.media_ids @property def field(self) -> Optional[Dict]: return self.__raw_data.field @property def tags(self) -> Optional[List[str]]: return self.__raw_data.tags @property def channel_id(self) -> Optional[str]: return self.__raw_data.channel_id @property def action(self) -> NoteActions: return self.__state.get_note_instance(self.id)
[ドキュメント] async def reply( self, content: Optional[str], cw: Optional[str] = None, extract_mentions: bool = True, extract_hashtags: bool = True, extract_emojis: bool = True, renote_id: Optional[str] = None, channel_id: Optional[str] = None, file_ids=None, poll: Optional[Poll] = None ) -> Note: """ ノートに対して返信を送信します Parameters ---------- content: Optional[str] 返信内容 cw: Optional[str] 閲覧注意 extract_mentions : bool, optional メンションを展開するか, by default False extract_hashtags : bool, optional ハッシュタグを展開するか, by default False extract_emojis : bool, optional 絵文字を展開するか, by default False renote_id : Optional[str], optional リノート先のid, by default None channel_id : Optional[str], optional チャンネルid, by default None file_ids : [type], optional 添付するファイルのid, by default None poll : Optional[Poll], optional アンケート, by default None """ if file_ids is None: file_ids = [] return await self.__state.note.send( content, visibility=self.visibility, visible_user_ids=self.visible_user_ids, cw=cw, local_only=self.local_only, extract_mentions=extract_mentions, extract_hashtags=extract_hashtags, extract_emojis=extract_emojis, reply_id=self.id, renote_id=renote_id, channel_id=channel_id, file_ids=file_ids, poll=poll )
[ドキュメント] def emoji_count(self) -> int: """ ノートの本文にemojiが何個含まれているかを返します Returns ------- int 含まれている絵文字の数 """ return utils.emoji_count(self.content)