Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/staciax/discord-linked-roles
A basic wrapper for the Discord Linked Roles OAuth2 API.
https://github.com/staciax/discord-linked-roles
api discord discord-api discord-bot http linked-role oauth2 python python-3
Last synced: about 2 months ago
JSON representation
A basic wrapper for the Discord Linked Roles OAuth2 API.
- Host: GitHub
- URL: https://github.com/staciax/discord-linked-roles
- Owner: staciax
- License: mit
- Created: 2023-01-24T08:28:14.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-04-27T18:38:19.000Z (9 months ago)
- Last Synced: 2024-10-18T13:16:51.572Z (3 months ago)
- Topics: api, discord, discord-api, discord-bot, http, linked-role, oauth2, python, python-3
- Language: Python
- Homepage:
- Size: 130 KB
- Stars: 25
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Discord Linked Roles OAuth2
A basic wrapper for the Discord Linked Roles OAuth2 API.## Installation
```sh
$ pip install -U linked-roles
```## FastAPI Example:
```py
from fastapi import FastAPI
from fastapi.responses import RedirectResponsefrom linked_roles import LinkedRolesOAuth2, RoleConnection, UserNotFound
app = FastAPI(title='Linked Roles')
client = LinkedRolesOAuth2(
client_id='client_id',
client_secret='client_secret',
redirect_uri='http://localhost:8000/verified-role',
# token='discord_token',
scopes=('role_connections.write', 'identify'),
)@app.on_event('startup')
async def startup():
await client.start()@app.on_event('shutdown')
async def shutdown():
await client.close()@app.get('/linked-role')
async def linked_roles():
url = client.get_oauth_url()
return RedirectResponse(url=url)@app.get('/verified-role')
async def verified_role(code: str):# get token
token = await client.get_access_token(code)# get user
user = await client.fetch_user(token)if user is None:
raise UserNotFound('User not found')role = await user.fetch_role_connection()
if role is None:
# set role connection
role = RoleConnection(platform_name='VALORANT', platform_username=str(user))# add metadata
role.add_metadata(key='matches', value=10)
role.add_metadata(key='winrate', value=20)
role.add_metadata(key='combat_score', value=30)# set role metadata
await user.edit_role_connection(role)return 'Role metadata set successfully. Please check your Discord profile.'
```## Register Example:
```py
import asynciofrom linked_roles import RoleMetadataType, LinkedRolesOAuth2, RoleMetadataRecord
async def main():
client = LinkedRolesOAuth2(client_id='client_id', token='discord_token')
async with client:
records = (
RoleMetadataRecord(
key='matches',
name='Matches',
type=2,
),
RoleMetadataRecord(
key='winrate',
name='Win Rate',
type=RoleMetadataType.interger_greater_than_or_equal, # Union Between int and RoleMetadataType
),
RoleMetadataRecord(
key='combat_score',
name='Combat Score',
description='Combat score this season', # description is optional (default: '...')
type=RoleMetadataType.interger_greater_than_or_equal,
)
)records = await client.register_role_metadata(records=records, force=True)
print(records)if __name__ == '__main__':
asyncio.run(main())```
## Cookie secret can be generated with:
```py
import uuid
>> uuid.uuid4().hex
```## License
licensed under the [MIT license](LICENSE).