We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Accessing a flag property on the class raises AttributeError
Due to this:

https://github.com/Rapptz/discord.py/blob/e473f3c775b26a4bb54b18eb6240757306f4f5c1/discord/flags.py#L38

This code:

```py
print(discord.Permissions.manage_messages)
```

Raises this error:
```pytb
  File ".venv/lib/python3.8/site-packages/discord/flags.py", line 38, in __get__
    return instance._has_flag(self.flag)
AttributeError: 'NoneType' object has no attribute '_has_flag'
```

Trying to access a descriptor on a class should display a meaningful repr.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `discord/flags.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 """
4 The MIT License (MIT)
5 
6 Copyright (c) 2015-2020 Rapptz
7 
8 Permission is hereby granted, free of charge, to any person obtaining a
9 copy of this software and associated documentation files (the "Software"),
10 to deal in the Software without restriction, including without limitation
11 the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 and/or sell copies of the Software, and to permit persons to whom the
13 Software is furnished to do so, subject to the following conditions:
14 
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 DEALINGS IN THE SOFTWARE.
25 """
26 
27 __all__ = (
28     'SystemChannelFlags',
29     'MessageFlags',
30 )
31 
32 class flag_value:
33     def __init__(self, func):
34         self.flag = func(None)
35         self.__doc__ = func.__doc__
36 
37     def __get__(self, instance, owner):
38         return instance._has_flag(self.flag)
39 
40     def __set__(self, instance, value):
41         instance._set_flag(self.flag, value)
42 
43 def fill_with_flags(*, inverted=False):
44     def decorator(cls):
45         cls.VALID_FLAGS = {
46             name: value.flag
47             for name, value in cls.__dict__.items()
48             if isinstance(value, flag_value)
49         }
50 
51         if inverted:
52             max_bits = max(cls.VALID_FLAGS.values()).bit_length()
53             cls.DEFAULT_VALUE = -1 + (2 ** max_bits)
54         else:
55             cls.DEFAULT_VALUE = 0
56 
57         return cls
58     return decorator
59 
60 # n.b. flags must inherit from this and use the decorator above
61 class BaseFlags:
62     __slots__ = ('value',)
63 
64     def __init__(self, **kwargs):
65         self.value = self.DEFAULT_VALUE
66         for key, value in kwargs.items():
67             if key not in self.VALID_FLAGS:
68                 raise TypeError('%r is not a valid flag name.' % key)
69             setattr(self, key, value)
70 
71     @classmethod
72     def _from_value(cls, value):
73         self = cls.__new__(cls)
74         self.value = value
75         return self
76 
77     def __eq__(self, other):
78         return isinstance(other, self.__class__) and self.value == other.value
79 
80     def __ne__(self, other):
81         return not self.__eq__(other)
82 
83     def __hash__(self):
84         return hash(self.value)
85 
86     def __repr__(self):
87         return '<%s value=%s>' % (self.__class__.__name__, self.value)
88 
89     def __iter__(self):
90         for name, value in self.__class__.__dict__.items():
91             if isinstance(value, flag_value):
92                 yield (name, self._has_flag(value.flag))
93 
94     def _has_flag(self, o):
95         return (self.value & o) == o
96 
97     def _set_flag(self, o, toggle):
98         if toggle is True:
99             self.value |= o
100         elif toggle is False:
101             self.value &= ~o
102         else:
103             raise TypeError('Value to set for %s must be a bool.' % self.__class__.__name__)
104 
105 @fill_with_flags(inverted=True)
106 class SystemChannelFlags(BaseFlags):
107     r"""Wraps up a Discord system channel flag value.
108 
109     Similar to :class:`Permissions`\, the properties provided are two way.
110     You can set and retrieve individual bits using the properties as if they
111     were regular bools. This allows you to edit the system flags easily.
112 
113     To construct an object you can pass keyword arguments denoting the flags
114     to enable or disable.
115 
116     .. container:: operations
117 
118         .. describe:: x == y
119 
120             Checks if two flags are equal.
121         .. describe:: x != y
122 
123             Checks if two flags are not equal.
124         .. describe:: hash(x)
125 
126                Return the flag's hash.
127         .. describe:: iter(x)
128 
129                Returns an iterator of ``(name, value)`` pairs. This allows it
130                to be, for example, constructed as a dict or a list of pairs.
131 
132     Attributes
133     -----------
134     value: :class:`int`
135         The raw value. This value is a bit array field of a 53-bit integer
136         representing the currently available flags. You should query
137         flags via the properties rather than using this raw value.
138     """
139     __slots__ = ()
140 
141     # For some reason the flags for system channels are "inverted"
142     # ergo, if they're set then it means "suppress" (off in the GUI toggle)
143     # Since this is counter-intuitive from an API perspective and annoying
144     # these will be inverted automatically
145 
146     def _has_flag(self, o):
147         return (self.value & o) != o
148 
149     def _set_flag(self, o, toggle):
150         if toggle is True:
151             self.value &= ~o
152         elif toggle is False:
153             self.value |= o
154         else:
155             raise TypeError('Value to set for SystemChannelFlags must be a bool.')
156 
157     @flag_value
158     def join_notifications(self):
159         """:class:`bool`: Returns ``True`` if the system channel is used for member join notifications."""
160         return 1
161 
162     @flag_value
163     def premium_subscriptions(self):
164         """:class:`bool`: Returns ``True`` if the system channel is used for Nitro boosting notifications."""
165         return 2
166 
167 
168 @fill_with_flags()
169 class MessageFlags(BaseFlags):
170     r"""Wraps up a Discord Message flag value.
171 
172     See :class:`SystemChannelFlags`.
173 
174     .. container:: operations
175 
176         .. describe:: x == y
177 
178             Checks if two flags are equal.
179         .. describe:: x != y
180 
181             Checks if two flags are not equal.
182         .. describe:: hash(x)
183 
184                Return the flag's hash.
185         .. describe:: iter(x)
186 
187                Returns an iterator of ``(name, value)`` pairs. This allows it
188                to be, for example, constructed as a dict or a list of pairs.
189 
190     .. versionadded:: 1.3
191 
192     Attributes
193     -----------
194     value: :class:`int`
195         The raw value. This value is a bit array field of a 53-bit integer
196         representing the currently available flags. You should query
197         flags via the properties rather than using this raw value.
198     """
199     __slots__ = ()
200 
201     @flag_value
202     def crossposted(self):
203         """:class:`bool`: Returns ``True`` if the message is the original crossposted message."""
204         return 1
205 
206     @flag_value
207     def is_crossposted(self):
208         """:class:`bool`: Returns ``True`` if the message was crossposted from another channel."""
209         return 2
210 
211     @flag_value
212     def suppress_embeds(self):
213         """:class:`bool`: Returns ``True`` if the message's embeds have been suppressed."""
214         return 4
215 
216     @flag_value
217     def source_message_deleted(self):
218         """:class:`bool`: Returns ``True`` if the source message for this crosspost has been deleted."""
219         return 8
220 
221     @flag_value
222     def urgent(self):
223         """:class:`bool`: Returns ``True`` if the source message is an urgent message.
224 
225         An urgent message is one sent by Discord Trust and Safety.
226         """
227         return 16
228
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/discord/flags.py b/discord/flags.py
--- a/discord/flags.py
+++ b/discord/flags.py
@@ -35,11 +35,16 @@
         self.__doc__ = func.__doc__
 
     def __get__(self, instance, owner):
+        if instance is None:
+            return self
         return instance._has_flag(self.flag)
 
     def __set__(self, instance, value):
         instance._set_flag(self.flag, value)
 
+    def __repr__(self):
+        return '<flag_value flag={.flag!r}>'.format(self)
+
 def fill_with_flags(*, inverted=False):
     def decorator(cls):
         cls.VALID_FLAGS = {

{"golden_diff": "diff --git a/discord/flags.py b/discord/flags.py\n--- a/discord/flags.py\n+++ b/discord/flags.py\n@@ -35,11 +35,16 @@\n         self.__doc__ = func.__doc__\n \n     def __get__(self, instance, owner):\n+        if instance is None:\n+            return self\n         return instance._has_flag(self.flag)\n \n     def __set__(self, instance, value):\n         instance._set_flag(self.flag, value)\n \n+    def __repr__(self):\n+        return '<flag_value flag={.flag!r}>'.format(self)\n+\n def fill_with_flags(*, inverted=False):\n     def decorator(cls):\n         cls.VALID_FLAGS = {\n", "issue": "Accessing a flag property on the class raises AttributeError\nDue to this:\r\n\r\nhttps://github.com/Rapptz/discord.py/blob/e473f3c775b26a4bb54b18eb6240757306f4f5c1/discord/flags.py#L38\r\n\r\nThis code:\r\n\r\n```py\r\nprint(discord.Permissions.manage_messages)\r\n```\r\n\r\nRaises this error:\r\n```pytb\r\n  File \".venv/lib/python3.8/site-packages/discord/flags.py\", line 38, in __get__\r\n    return instance._has_flag(self.flag)\r\nAttributeError: 'NoneType' object has no attribute '_has_flag'\r\n```\r\n\r\nTrying to access a descriptor on a class should display a meaningful repr.\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\n\"\"\"\nThe MIT License (MIT)\n\nCopyright (c) 2015-2020 Rapptz\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\"\"\"\n\n__all__ = (\n    'SystemChannelFlags',\n    'MessageFlags',\n)\n\nclass flag_value:\n    def __init__(self, func):\n        self.flag = func(None)\n        self.__doc__ = func.__doc__\n\n    def __get__(self, instance, owner):\n        return instance._has_flag(self.flag)\n\n    def __set__(self, instance, value):\n        instance._set_flag(self.flag, value)\n\ndef fill_with_flags(*, inverted=False):\n    def decorator(cls):\n        cls.VALID_FLAGS = {\n            name: value.flag\n            for name, value in cls.__dict__.items()\n            if isinstance(value, flag_value)\n        }\n\n        if inverted:\n            max_bits = max(cls.VALID_FLAGS.values()).bit_length()\n            cls.DEFAULT_VALUE = -1 + (2 ** max_bits)\n        else:\n            cls.DEFAULT_VALUE = 0\n\n        return cls\n    return decorator\n\n# n.b. flags must inherit from this and use the decorator above\nclass BaseFlags:\n    __slots__ = ('value',)\n\n    def __init__(self, **kwargs):\n        self.value = self.DEFAULT_VALUE\n        for key, value in kwargs.items():\n            if key not in self.VALID_FLAGS:\n                raise TypeError('%r is not a valid flag name.' % key)\n            setattr(self, key, value)\n\n    @classmethod\n    def _from_value(cls, value):\n        self = cls.__new__(cls)\n        self.value = value\n        return self\n\n    def __eq__(self, other):\n        return isinstance(other, self.__class__) and self.value == other.value\n\n    def __ne__(self, other):\n        return not self.__eq__(other)\n\n    def __hash__(self):\n        return hash(self.value)\n\n    def __repr__(self):\n        return '<%s value=%s>' % (self.__class__.__name__, self.value)\n\n    def __iter__(self):\n        for name, value in self.__class__.__dict__.items():\n            if isinstance(value, flag_value):\n                yield (name, self._has_flag(value.flag))\n\n    def _has_flag(self, o):\n        return (self.value & o) == o\n\n    def _set_flag(self, o, toggle):\n        if toggle is True:\n            self.value |= o\n        elif toggle is False:\n            self.value &= ~o\n        else:\n            raise TypeError('Value to set for %s must be a bool.' % self.__class__.__name__)\n\n@fill_with_flags(inverted=True)\nclass SystemChannelFlags(BaseFlags):\n    r\"\"\"Wraps up a Discord system channel flag value.\n\n    Similar to :class:`Permissions`\\, the properties provided are two way.\n    You can set and retrieve individual bits using the properties as if they\n    were regular bools. This allows you to edit the system flags easily.\n\n    To construct an object you can pass keyword arguments denoting the flags\n    to enable or disable.\n\n    .. container:: operations\n\n        .. describe:: x == y\n\n            Checks if two flags are equal.\n        .. describe:: x != y\n\n            Checks if two flags are not equal.\n        .. describe:: hash(x)\n\n               Return the flag's hash.\n        .. describe:: iter(x)\n\n               Returns an iterator of ``(name, value)`` pairs. This allows it\n               to be, for example, constructed as a dict or a list of pairs.\n\n    Attributes\n    -----------\n    value: :class:`int`\n        The raw value. This value is a bit array field of a 53-bit integer\n        representing the currently available flags. You should query\n        flags via the properties rather than using this raw value.\n    \"\"\"\n    __slots__ = ()\n\n    # For some reason the flags for system channels are \"inverted\"\n    # ergo, if they're set then it means \"suppress\" (off in the GUI toggle)\n    # Since this is counter-intuitive from an API perspective and annoying\n    # these will be inverted automatically\n\n    def _has_flag(self, o):\n        return (self.value & o) != o\n\n    def _set_flag(self, o, toggle):\n        if toggle is True:\n            self.value &= ~o\n        elif toggle is False:\n            self.value |= o\n        else:\n            raise TypeError('Value to set for SystemChannelFlags must be a bool.')\n\n    @flag_value\n    def join_notifications(self):\n        \"\"\":class:`bool`: Returns ``True`` if the system channel is used for member join notifications.\"\"\"\n        return 1\n\n    @flag_value\n    def premium_subscriptions(self):\n        \"\"\":class:`bool`: Returns ``True`` if the system channel is used for Nitro boosting notifications.\"\"\"\n        return 2\n\n\n@fill_with_flags()\nclass MessageFlags(BaseFlags):\n    r\"\"\"Wraps up a Discord Message flag value.\n\n    See :class:`SystemChannelFlags`.\n\n    .. container:: operations\n\n        .. describe:: x == y\n\n            Checks if two flags are equal.\n        .. describe:: x != y\n\n            Checks if two flags are not equal.\n        .. describe:: hash(x)\n\n               Return the flag's hash.\n        .. describe:: iter(x)\n\n               Returns an iterator of ``(name, value)`` pairs. This allows it\n               to be, for example, constructed as a dict or a list of pairs.\n\n    .. versionadded:: 1.3\n\n    Attributes\n    -----------\n    value: :class:`int`\n        The raw value. This value is a bit array field of a 53-bit integer\n        representing the currently available flags. You should query\n        flags via the properties rather than using this raw value.\n    \"\"\"\n    __slots__ = ()\n\n    @flag_value\n    def crossposted(self):\n        \"\"\":class:`bool`: Returns ``True`` if the message is the original crossposted message.\"\"\"\n        return 1\n\n    @flag_value\n    def is_crossposted(self):\n        \"\"\":class:`bool`: Returns ``True`` if the message was crossposted from another channel.\"\"\"\n        return 2\n\n    @flag_value\n    def suppress_embeds(self):\n        \"\"\":class:`bool`: Returns ``True`` if the message's embeds have been suppressed.\"\"\"\n        return 4\n\n    @flag_value\n    def source_message_deleted(self):\n        \"\"\":class:`bool`: Returns ``True`` if the source message for this crosspost has been deleted.\"\"\"\n        return 8\n\n    @flag_value\n    def urgent(self):\n        \"\"\":class:`bool`: Returns ``True`` if the source message is an urgent message.\n\n        An urgent message is one sent by Discord Trust and Safety.\n        \"\"\"\n        return 16\n", "path": "discord/flags.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n\n\"\"\"\nThe MIT License (MIT)\n\nCopyright (c) 2015-2020 Rapptz\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\"\"\"\n\n__all__ = (\n    'SystemChannelFlags',\n    'MessageFlags',\n)\n\nclass flag_value:\n    def __init__(self, func):\n        self.flag = func(None)\n        self.__doc__ = func.__doc__\n\n    def __get__(self, instance, owner):\n        if instance is None:\n            return self\n        return instance._has_flag(self.flag)\n\n    def __set__(self, instance, value):\n        instance._set_flag(self.flag, value)\n\n    def __repr__(self):\n        return '<flag_value flag={.flag!r}>'.format(self)\n\ndef fill_with_flags(*, inverted=False):\n    def decorator(cls):\n        cls.VALID_FLAGS = {\n            name: value.flag\n            for name, value in cls.__dict__.items()\n            if isinstance(value, flag_value)\n        }\n\n        if inverted:\n            max_bits = max(cls.VALID_FLAGS.values()).bit_length()\n            cls.DEFAULT_VALUE = -1 + (2 ** max_bits)\n        else:\n            cls.DEFAULT_VALUE = 0\n\n        return cls\n    return decorator\n\n# n.b. flags must inherit from this and use the decorator above\nclass BaseFlags:\n    __slots__ = ('value',)\n\n    def __init__(self, **kwargs):\n        self.value = self.DEFAULT_VALUE\n        for key, value in kwargs.items():\n            if key not in self.VALID_FLAGS:\n                raise TypeError('%r is not a valid flag name.' % key)\n            setattr(self, key, value)\n\n    @classmethod\n    def _from_value(cls, value):\n        self = cls.__new__(cls)\n        self.value = value\n        return self\n\n    def __eq__(self, other):\n        return isinstance(other, self.__class__) and self.value == other.value\n\n    def __ne__(self, other):\n        return not self.__eq__(other)\n\n    def __hash__(self):\n        return hash(self.value)\n\n    def __repr__(self):\n        return '<%s value=%s>' % (self.__class__.__name__, self.value)\n\n    def __iter__(self):\n        for name, value in self.__class__.__dict__.items():\n            if isinstance(value, flag_value):\n                yield (name, self._has_flag(value.flag))\n\n    def _has_flag(self, o):\n        return (self.value & o) == o\n\n    def _set_flag(self, o, toggle):\n        if toggle is True:\n            self.value |= o\n        elif toggle is False:\n            self.value &= ~o\n        else:\n            raise TypeError('Value to set for %s must be a bool.' % self.__class__.__name__)\n\n@fill_with_flags(inverted=True)\nclass SystemChannelFlags(BaseFlags):\n    r\"\"\"Wraps up a Discord system channel flag value.\n\n    Similar to :class:`Permissions`\\, the properties provided are two way.\n    You can set and retrieve individual bits using the properties as if they\n    were regular bools. This allows you to edit the system flags easily.\n\n    To construct an object you can pass keyword arguments denoting the flags\n    to enable or disable.\n\n    .. container:: operations\n\n        .. describe:: x == y\n\n            Checks if two flags are equal.\n        .. describe:: x != y\n\n            Checks if two flags are not equal.\n        .. describe:: hash(x)\n\n               Return the flag's hash.\n        .. describe:: iter(x)\n\n               Returns an iterator of ``(name, value)`` pairs. This allows it\n               to be, for example, constructed as a dict or a list of pairs.\n\n    Attributes\n    -----------\n    value: :class:`int`\n        The raw value. This value is a bit array field of a 53-bit integer\n        representing the currently available flags. You should query\n        flags via the properties rather than using this raw value.\n    \"\"\"\n    __slots__ = ()\n\n    # For some reason the flags for system channels are \"inverted\"\n    # ergo, if they're set then it means \"suppress\" (off in the GUI toggle)\n    # Since this is counter-intuitive from an API perspective and annoying\n    # these will be inverted automatically\n\n    def _has_flag(self, o):\n        return (self.value & o) != o\n\n    def _set_flag(self, o, toggle):\n        if toggle is True:\n            self.value &= ~o\n        elif toggle is False:\n            self.value |= o\n        else:\n            raise TypeError('Value to set for SystemChannelFlags must be a bool.')\n\n    @flag_value\n    def join_notifications(self):\n        \"\"\":class:`bool`: Returns ``True`` if the system channel is used for member join notifications.\"\"\"\n        return 1\n\n    @flag_value\n    def premium_subscriptions(self):\n        \"\"\":class:`bool`: Returns ``True`` if the system channel is used for Nitro boosting notifications.\"\"\"\n        return 2\n\n\n@fill_with_flags()\nclass MessageFlags(BaseFlags):\n    r\"\"\"Wraps up a Discord Message flag value.\n\n    See :class:`SystemChannelFlags`.\n\n    .. container:: operations\n\n        .. describe:: x == y\n\n            Checks if two flags are equal.\n        .. describe:: x != y\n\n            Checks if two flags are not equal.\n        .. describe:: hash(x)\n\n               Return the flag's hash.\n        .. describe:: iter(x)\n\n               Returns an iterator of ``(name, value)`` pairs. This allows it\n               to be, for example, constructed as a dict or a list of pairs.\n\n    .. versionadded:: 1.3\n\n    Attributes\n    -----------\n    value: :class:`int`\n        The raw value. This value is a bit array field of a 53-bit integer\n        representing the currently available flags. You should query\n        flags via the properties rather than using this raw value.\n    \"\"\"\n    __slots__ = ()\n\n    @flag_value\n    def crossposted(self):\n        \"\"\":class:`bool`: Returns ``True`` if the message is the original crossposted message.\"\"\"\n        return 1\n\n    @flag_value\n    def is_crossposted(self):\n        \"\"\":class:`bool`: Returns ``True`` if the message was crossposted from another channel.\"\"\"\n        return 2\n\n    @flag_value\n    def suppress_embeds(self):\n        \"\"\":class:`bool`: Returns ``True`` if the message's embeds have been suppressed.\"\"\"\n        return 4\n\n    @flag_value\n    def source_message_deleted(self):\n        \"\"\":class:`bool`: Returns ``True`` if the source message for this crosspost has been deleted.\"\"\"\n        return 8\n\n    @flag_value\n    def urgent(self):\n        \"\"\":class:`bool`: Returns ``True`` if the source message is an urgent message.\n\n        An urgent message is one sent by Discord Trust and Safety.\n        \"\"\"\n        return 16\n", "path": "discord/flags.py"}]}