Package: discord.py-unofficial
What this fork is aboutThis fork is based on the v0.16.12 version of discord.py and aims to update it for Discord's API version 7, including the new endpoint and Gateway Intents.Note for MigrationFrom versionv0.17.0-beta.4onwards (ie. all functional versions), the file name for importing was changed fromdiscordtodiscord_unofficialto prevent conflict with the updated maindiscord.pylibrary.
You will need to change your import code to useimport discord_unofficial as discordinstead.
Due to updates in the aiohttp library, this does not support Python 3.4 anymore. The minimal supported version is Python 3.5.3. Although, I have only tested this on Python 3.6 and 3.7, so I do not have 100% proof if this will work with Python 3.5.3. Updating to support to Python 3.8 may be possible by updating the dependency versions, updating aiohttp to 3.6.1, and the websocket library to 8.1 or above, however the websocket library may not work with the code here.How to use Gateway IntentsBy default, this will subscribe you to all intents, including privileged intents. To specify which intents to use, you should do so when creating theClientobject.Doing the following will subscribe you to all non-privileged intents:importdiscord_unofficialasdiscordimportasyncioclient=discord.Client(use_privileged_intents=False)While doing the following will allow you to specify which intents you wish to subscribe to (In the case thatuse_privileged_intentsis set toFalse, privileged intents will be not subscribed to even if they were set)importdiscord_unofficialasdiscordimportasyncioclient=discord.Client(use_privileged_intents=False,intents=0b1000011)0b1000011corresponds to theGUILD_INVITES,GUILD_MEMBERSandGUILDSGateway intents respectively, however, asGUILD_MEMBERSis a privileged intent, anduse_privileged_intentswas set toFalse, it will not be subscribed to. So the above code is the same as the following.importdiscord_unofficialasdiscordimportasyncioclient=discord.Client(intents=0b1000001)discord.pydiscord.py is an API wrapper for Discord written in Python.This was written to allow easier writing of bots or chat logs. Make sure to familiarise yourself with the API using thedocumentation.This fork runs on v0.16.12 for the most part, the original documentation for that can be foundhereThis was modified to allow old bots that still ran on the async branch (v0.16.12) of theoriginal discord.py librarymade by Rapptz to be compatible with Discord's upcoming v7 api.Breaking ChangesThe discord API is constantly changing and the wrapper API is as well. Unlike the original async branch, there will be an effort to keep backwards compatibility in all versions of this, beginning withv0.17.0.I recommend joining either theofficial discord.py serveror theDiscord API serverfor help and discussion about the library.InstallingTo install the library without full voice support, you can just run the following command:python3 -m pip install -U discord.pyOtherwise to get voice support you should run the following command:python3 -m pip install -U discord.py[voice]To install the development version, do the following:python3 -m pip install -U https://github.com/Rapptz/discord.py/archive/master.zip#egg=discord.py[voice]or the more long winded from cloned source:$ git clone https://github.com/Rapptz/discord.py
$ cd discord.py
$ python3 -m pip install -U .[voice]Please note that on Linux installing voice you must install the following packages via your favourite package manager (e.g.apt,yum, etc) before running the above command:libffi-dev (orlibffi-develon some systems)python-dev (e.g.python3.5-devfor Python 3.5)Quick Exampleimportdiscordimportasyncioclient=discord.Client()@client.eventasyncdefon_ready():print('Logged in as')print(client.user.name)print(client.user.id)print('------')@client.eventasyncdefon_message(message):ifmessage.content.startswith('!test'):counter=0tmp=awaitclient.send_message(message.channel,'Calculating messages...')asyncforloginclient.logs_from(message.channel,limit=100):iflog.author==message.author:counter+=1awaitclient.edit_message(tmp,'You have{}messages.'.format(counter))elifmessage.content.startswith('!sleep'):awaitasyncio.sleep(5)awaitclient.send_message(message.channel,'Done sleeping')client.run('token')Note that in Python 3.4 you use@asyncio.coroutineinstead ofasync defandyield frominstead ofawait.You can find examples in the examples directory.RequirementsPython 3.4.2+aiohttplibrarywebsocketslibraryPyNaCllibrary (optional, for voice only)On Linux systems this requires thelibffilibrary. You can install in
debian based systems by doingsudo apt-get install libffi-dev.Usuallypipwill handle these for you.