mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-09-06 09:56:09 +00:00
Add support for configuring allowed mentions per message or bot wide.
This commit is contained in:
98
discord/mentions.py
Normal file
98
discord/mentions.py
Normal file
@ -0,0 +1,98 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015-2020 Rapptz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
"""
|
||||
|
||||
class _FakeBool:
|
||||
def __repr__(self):
|
||||
return 'True'
|
||||
|
||||
def __eq__(self, other):
|
||||
return other is True
|
||||
|
||||
def __bool__(self):
|
||||
return True
|
||||
|
||||
default = _FakeBool()
|
||||
|
||||
class AllowedMentions:
|
||||
"""A class that represents what mentions are allowed in a message.
|
||||
|
||||
This class can be set during :class:`Client` initialization to apply
|
||||
to every message sent. It can also be applied on a per message basis
|
||||
via :meth:`abc.Messageable.send` for more fine-grained control.
|
||||
|
||||
Attributes
|
||||
------------
|
||||
everyone: :class:`bool`
|
||||
Whether to allow everyone and here mentions. Defaults to ``True``.
|
||||
users: Union[:class:`bool`, List[:class:`abc.Snowflake`]]
|
||||
Controls the users being mentioned. If ``True`` (the default) then
|
||||
users are mentioned based on the message content. If ``False`` then
|
||||
users are not mentioned at all. If a list of :class:`abc.Snowflake`
|
||||
is given then only the users provided will be mentioned, provided those
|
||||
users are in the message content.
|
||||
roles: Union[:class:`bool`, List[:class:`abc.Snowflake`]]
|
||||
Controls the roles being mentioned. If ``True`` (the default) then
|
||||
roles are mentioned based on the message content. If ``False`` then
|
||||
roles are not mentioned at all. If a list of :class:`abc.Snowflake`
|
||||
is given then only the roles provided will be mentioned, provided those
|
||||
roles are in the message content.
|
||||
"""
|
||||
|
||||
__slots__ = ('everyone', 'users', 'roles')
|
||||
|
||||
def __init__(self, *, everyone=default, users=default, roles=default):
|
||||
self.everyone = everyone
|
||||
self.users = users
|
||||
self.roles = roles
|
||||
|
||||
def to_dict(self):
|
||||
parse = []
|
||||
data = {}
|
||||
|
||||
if self.everyone:
|
||||
parse.append('everyone')
|
||||
|
||||
if self.users == True:
|
||||
parse.append('users')
|
||||
elif self.users != False:
|
||||
data['users'] = [x.id for x in self.users]
|
||||
|
||||
if self.roles == True:
|
||||
parse.append('roles')
|
||||
elif self.roles != False:
|
||||
data['roles'] = [x.id for x in self.roles]
|
||||
|
||||
data['parse'] = parse
|
||||
return data
|
||||
|
||||
def merge(self, other):
|
||||
# Creates a new AllowedMentions by merging from another one.
|
||||
# Merge is done by using the 'self' values unless explicitly
|
||||
# overridden by the 'other' values.
|
||||
everyone = self.everyone if other.everyone is default else other.everyone
|
||||
users = self.users if other.users is default else other.users
|
||||
roles = self.roles if other.roles is default else other.roles
|
||||
return AllowedMentions(everyone=everyone, roles=roles, users=users)
|
Reference in New Issue
Block a user