Source code for acord.bases.mentions

# Smaller API objects that dont need seperate files
from __future__ import annotations
from typing import List, Optional

import pydantic


[docs]class AllowedMentions(pydantic.BaseModel): roles: Optional[List[int]] """ List of roles to mention """ users: Optional[List[int]] """ List of users to mention """ replied_user: Optional[bool] = False """ Whether to mention to user being replied """ # Other relevant stuff everyone: Optional[bool] = False """ Whether to allow @everyone / @here pings """ deny_all: Optional[bool] = False """ Simply reject every single mention on message """ parse: Optional[List[str]] = list() # Field should not be provided! # If provided just gets overwritten @pydantic.validator("parse") def _validate_parse(cls, _, **kwargs) -> list: kwargs = kwargs["values"] if kwargs["deny_all"]: return ["everyone", "roles", "users"] mentions = list() roles = kwargs.get("roles") is not None users = kwargs.get("users") is not None everyone = kwargs.get("everyone") is not None if roles: mentions.append("roles") if users: mentions.append("users") if everyone: mentions.append("everyone") return mentions def dict(self, **kwargs): """:meta private:""" # Override pydantic to return proper AllowedMention structure if self.deny_all: return {"parse": []} parsed = super(AllowedMentions, self).dict(**kwargs) parsed.pop("everyone") parsed.pop("deny_all") return parsed