
    {iW*                        S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  \(       a  SSKr " S S\5      rg)zProvides the User class.    )annotations)TYPE_CHECKINGIterator)warn)Conflict   )API_PATH)ReadOnlyException)Preferences)_deprecate_args)cachedproperty   )PRAWBase)ListingGenerator)Redditor)	SubredditNc                    ^  \ rS rSrSr\SS j5       rSU 4S jjrSS jr    SS jr	\
" S5      SS	.   SS
 jj5       rSS jr\
" S5      SS.SS jj5       r    SS jrSS jrSSS.       SS jjr    SS jrSS jrSrU =r$ ) User   zOThe :class:`.User` class provides methods for the currently authenticated user.c                ,    [        U R                  5      $ )a  Get an instance of :class:`.Preferences`.

The preferences can be accessed as a ``dict`` like so:

.. code-block:: python

    preferences = reddit.user.preferences()
    print(preferences["show_link_flair"])

Preferences can be updated via:

.. code-block:: python

    reddit.user.preferences.update(show_link_flair=True)

The :meth:`.Preferences.update` method returns the new state of the preferences
as a ``dict``, which can be used to check whether a change went through. Changes
with invalid types or parameter names fail silently.

.. code-block:: python

    original_preferences = reddit.user.preferences()
    new_preferences = reddit.user.preferences.update(invalid_param=123)
    print(original_preferences == new_preferences)  # True, no change

)r   _redditselfs    J/home/james-whalen/.local/lib/python3.13/site-packages/praw/models/user.pypreferencesUser.preferences   s    8 4<<((    c                "   > [         TU ]  USS9  g)zoInitialize an :class:`.User` instance.

This class is intended to be interfaced with through ``reddit.user``.

N_data)super__init__)r   reddit	__class__s     r   r"   User.__init__9   s     	t,r   c                F    U R                   R                  [        S   5      $ )zAReturn a :class:`.RedditorList` of blocked :class:`.Redditor`\ s.blockedr   getr	   r   s    r   r'   User.blockedA   s    || 344r   c                >    [        U R                  [        S   40 UD6$ )a  Return a :class:`.ListingGenerator` of contributor :class:`.Subreddit`\ s.

These are subreddits in which the user is an approved user.

Additional keyword arguments are passed in the initialization of
:class:`.ListingGenerator`.

To print a list of the subreddits that you are an approved user in, try:

.. code-block:: python

    for subreddit in reddit.user.contributor_subreddits(limit=None):
        print(str(subreddit))

my_contributorr   r   r	   r   generator_kwargss     r   contributor_subredditsUser.contributor_subredditsE   s(    $  LL(#34
8H
 	
r   userNr2   c                   Uc	  [         S   O[         S   R                  [        U5      S9nU R                  R	                  U5      $ )a  Return a :class:`.RedditorList` of friends or a :class:`.Redditor` in the friends list.

:param user: Checks to see if you are friends with the redditor. Either an
    instance of :class:`.Redditor` or a string can be given.

:returns: A list of :class:`.Redditor`\ s, or a single :class:`.Redditor` if
    ``user`` is specified. The :class:`.Redditor` instance(s) returned also has
    friend attributes.

:raises: An instance of :class:`.RedditAPIException` if you are not friends with
    the specified :class:`.Redditor`.

friends	friend_v1r3   )r	   formatstrr   r)   )r   r2   endpoints      r   r5   User.friends[   sI    & | Y+&--3t9-= 	
 ||))r   c                    0 nU R                   R                  [        S   5      S    H#  n[        U R                   US   5      nUS	 X!U'   M%     U$ )a  Return a dictionary mapping :class:`.Subreddit`\ s to their karma.

The returned dict contains subreddits as keys. Each subreddit key contains a
sub-dict that have keys for ``comment_karma`` and ``link_karma``. The dict is
sorted in descending karma order.

.. note::

    Each key of the main dict is an instance of :class:`.Subreddit`. It is
    recommended to iterate over the dict in order to retrieve the values,
    preferably through :py:meth:`dict.items`.

karmadatasr)r   r)   r	   r   )r   	karma_maprow	subreddits       r   r<   
User.karmas   sW     	<<##HW$56v>C!$,,D	:ID	#&i  ? r   	use_cacheT)rC   c                  U R                   R                  (       aQ  U R                   R                  R                  R	                  S5      (       d  [        S[        SS9  gSn[        U5      eSU R                  ;  d  U(       d;  U R                   R	                  [        S   5      n[        U R                   US	9U l        U R                  $ )
a  Return a :class:`.Redditor` instance for the authenticated user.

:param use_cache: When ``True``, and if this function has been previously
    called, returned the cached version (default: ``True``).

.. note::

    If you change the :class:`.Reddit` instance's authorization, you might want
    to refresh the cached value. Prefer using separate :class:`.Reddit`
    instances, however, for distinct authorizations.

.. deprecated:: 7.2

    In :attr:`.read_only` mode this method returns ``None``. In PRAW 8 this
    method will raise :class:`.ReadOnlyException` when called in
    :attr:`.read_only` mode. To operate in PRAW 8 mode, set the config variable
    ``praw8_raise_exception_on_me`` to ``True``.

praw8_raise_exception_on_mezThe 'None' return value is deprecated, and will raise a ReadOnlyException beginning with PRAW 8. See documentation for forward compatibility options.r   )category
stacklevelNz+`user.me()` does not work in read_only mode_memer   )r   	read_onlyconfigcustomr)   r   DeprecationWarningr
   __dict__r	   r   rH   )r   rC   msg	user_datas       r   rI   User.me   s    * <<!!<<&&--112OPP6 0  ?C#C((%Y(($8II>DHxxr   c                >    [        U R                  [        S   40 UD6$ )a  Return a :class:`.ListingGenerator` subreddits that the user moderates.

Additional keyword arguments are passed in the initialization of
:class:`.ListingGenerator`.

To print a list of the names of the subreddits you moderate, try:

.. code-block:: python

    for subreddit in reddit.user.moderator_subreddits(limit=None):
        print(str(subreddit))

.. seealso::

    :meth:`.Redditor.moderated`

my_moderatorr-   r.   s     r   moderator_subredditsUser.moderator_subreddits   s'    (  LL(>2
6F
 	
r   c                F    U R                   R                  [        S   5      $ )z@Return a list of :class:`.Multireddit`\ s belonging to the user.my_multiredditsr(   r   s    r   multiredditsUser.multireddits   s    ||): ;<<r   )numstatec                   UR                   UUSS.n U R                  R                  [        S   US9$ ! [         a     gf = f)a[  Set the pin state of a submission on the authenticated user's profile.

:param submission: An instance of :class:`.Submission` that will be
    pinned/unpinned.
:param num: If specified, the slot in which the submission will be pinned into.
    If there is a submission already in the specified slot, it will be replaced.
    If ``None`` or there is not a submission in the specified slot, the first
    available slot will be used (default: ``None``). If all slots are used the
    following will occur:

    - Old Reddit:

      1. The submission in the last slot will be unpinned.
      2. The remaining pinned submissions will be shifted down a slot.
      3. The new submission will be pinned in the first slot.

    - New Reddit:

      1. The submission in the first slot will be unpinned.
      2. The remaining pinned submissions will be shifted up a slot.
      3. The new submission will be pinned in the last slot.

    .. note::

        At the time of writing (10/22/2021), there are 4 pin slots available and
        pins are in reverse order on old Reddit. If ``num`` is an invalid value,
        Reddit will ignore it and the same behavior will occur as if ``num`` is
        ``None``.

:param state: ``True`` pins the submission, ``False`` unpins (default:
    ``True``).

:returns: The pinned submission.

:raises: ``prawcore.BadRequest`` when pinning a removed or deleted submission.
:raises: ``prawcore.Forbidden`` when pinning a submission the authenticated user
    is not the author of.

.. code-block:: python

    submission = next(reddit.user.me().submissions.new())
    reddit.user.pin(submission)

T)idrZ   r[   
to_profilesticky_submission)r=   N)fullnamer   postr	   r   )r   
submissionrZ   r[   r=   s        r   pinUser.pin   sU    ` %%	
	<<$$X.A%B$NN 		s    4 
A Ac                >    [        U R                  [        S   40 UD6$ )al  Return a :class:`.ListingGenerator` of :class:`.Subreddit`\ s the user is subscribed to.

Additional keyword arguments are passed in the initialization of
:class:`.ListingGenerator`.

To print a list of the subreddits that you are subscribed to, try:

.. code-block:: python

    for subreddit in reddit.user.subreddits(limit=None):
        print(str(subreddit))

my_subredditsr-   r.   s     r   
subredditsUser.subreddits  s'       LL(?3
7G
 	
r   c                F    U R                   R                  [        S   5      $ )aC  Return a :class:`.RedditorList` of trusted :class:`.Redditor`\ s.

To display the usernames of your trusted users and the times at which you
decided to trust them, try:

.. code-block:: python

    trusted_users = reddit.user.trusted()
    for user in trusted_users:
        print(f"User: {user.name}, time: {user.date}")

trustedr(   r   s    r   rj   User.trusted  s     || 344r   )rH   )returnzpraw.models.Preferences)r#   zpraw.Reddit)rl   zlist[praw.models.Redditor])r/   zstr | int | dict[str, str]rl   zIterator[praw.models.Subreddit])r2   z!str | praw.models.Redditor | Nonerl   z1list[praw.models.Redditor] | praw.models.Redditor)rl   z+dict[praw.models.Subreddit, dict[str, int]])rC   boolrl   zpraw.models.Redditor | None)rl   zlist[praw.models.Multireddit])rb   praw.models.SubmissionrZ   intr[   rm   rl   rn   )__name__
__module____qualname____firstlineno____doc__r   r   r"   r'   r0   r   r5   r<   rI   rT   rX   rc   rg   rj   __static_attributes____classcell__)r$   s   @r   r   r      s    Y) ):-5
"<
	(
, V;?*8*	:* *.* [!&* # "#J
"<
	(
0=
 AETX808:=8MQ8	8t
"<
	(
(5 5r   r   )rt   
__future__r   typingr   r   warningsr   prawcorer   constr	   
exceptionsr
   modelsr   utilr   
util.cacher   baser   listing.generatorr   reddit.redditorr   reddit.subredditr   praw.modelsprawr    r   r   <module>r      sC     " *    *   " '  / % 'M58 M5r   