Depuis les débuts de Discord, les émojis Twitch de certains streamers sont disponibles sur l'application pour leurs subs uniquement. Tu te doutes bien que cette restriction ne se base pas sur les connexions des utilisateurs, mais bel et bien sur le rôle de sub qui leur est attribué sur le serveur du streamer...
Comment ça fonctionne ?
En réalité, ce n'est qu'une simple liste portant la clé roles
dans l'objet Emoji que Discord stocke sur ses serveurs. Pour le moment, ces restrictions ne sont pas modifiables via l'interface utilisateur, seule une requête API via un bot permet de modifier cette valeur.
Historiquement, cette fonction a été créée pour gérer les émojis Twitch et n'était pas modifiable, même par requête API. Par la suite, celle-ci a été rendue publique.
Comment faire ?
note
Si tu n'as pas encore de bot, tu peux en créer un sur le Portail des Développeurs.
Attention
Assure-toi que ton bot est sur le serveur où tu veux appliquer des restrictions et qu'il y possède la permission Gérer les emojis et stickers
(MANAGE_EMOJIS_AND_STICKERS
).
- JavaScript (D.JS)
- Python (D.PY)
- API
Voici un tutoriel détaillé sur la façon de s'y prendre en JavaScript avec le module discord.js.
Attention
Il te faut impérativement posséder Node.JS v16.6.0 (ou plus récent) sur ta machine.
Pour plus d'informations, je t'invite à consulter la documentation de discord.js.
Tout d'abord, crée un dossier et ouvre une invite de commande à l'intérieur.
$ cd ton-dossier
Installe ensuite discord.js
sur ton projet.
- npm
- yarn
- pnpm
$ npm install discord.js
$ yarn add discord.js
$ pnpm add discord.js
Puis, crée un fichier index.js
contenant ceci.
/**
* Importe le Client et les Intents du module discord.js
*/
const { Client, Intents } = require("discord.js");
/**
* Initialisation du Client Websocket.
* Intents.ALL correspond au bitfield de la totalité des Intents existantes.
* Y enlever 256 permet d'utiliser toutes les Intents non privilégiés.
* (Si votre bot les possède vous pouvez enlever "-256")
*/
const client = new Client({
intents: Intents.ALL - 256
});
/**
* Attend que la connexion au Websocket soit établie.
*/
client.once("ready", () => {
/**
* Récupère le serveur.
* guildID correspond à l'ID du serveur où se trouve l'émoji.
*/
const guild = client.guilds.cache.get("guildID");
/**
* Récupère l'émoji
* emojiID correspond à l'ID de l'émoji en question.
*/
const emoji = guild.emojis.cache.get("emojiID");
/**
* Ajoute le rôle à la liste des rôles ayant accès à l'émoji.
* roleID correspond à l'ID du rôle qui doit avoir accès à l'émoji.
*/
emoji.roles.add("roleID");
});
/**
* Authentification au Websocket de Discord.
* token correspond au jeton d'authentification du bot.
* Celui-ci est disponible sur le portail des développeurs.
*/
client.login("token");
emoji.roles
correspond à la classe GuildEmojiRoleManager de discord.js.
Enfin, exécute le fichier index.js
.
$ node index.js
Voici un tutoriel détaillé sur la façon de s'y prendre en Python avec le module discord.py.
Attention
Il te faut impérativement posséder Python v3.5.3 (ou plus récent) sur ta machine.
Pour plus d'informations, je t'invite à consulter la documentation de discord.py.
Tout d'abord, crée un dossier et ouvre une invite de commande à l'interieur.
$ cd ton-dossier
Crée ensuite un environnement virtuel dans ton dossier.
- Windows
- Autre
$ py -3 -m venv bot-env
$ python3 -m venv bot-env
Puis active l'environnement virtuel.
- Windows
- Autre
$ bot-env\Scripts\activate.bat
$ source bot-env/bin/activate
Installe discord.py
sur ton projet.
$ pip install -U discord.py
Et crée un fichier main.py
contenant ceci.
# Importe le module discord.py
import discord
# Initialisation du Client Websocket.
client = discord.Client()
# Attend que la connexion au Websocket soit établie.
@client.event
async def on_ready():
# Récupère le serveur.
# guildID correspond à l'ID du serveur où se trouve l'émoji.
guild = await client.fetch_guild(guildID)
# Récupère l'émoji.
# emojiID correspond à l'ID de l'émoji en question.
emoji = await guild.fetch_emoji(emojiID)
# Récupère le rôle.
# roleID correspond à l'ID du rôle qui doit avoir accès à l'émoji.
role = guild.get_role(roleID)
# Ajoute le rôle à la liste des rôles ayant accès à l'émoji.
await emoji.edit(roles=[role])
# Authentification au Websocket de Discord.
# token correspond au jeton d'authentification du bot.
# Disponible sur le portail du développeur.
client.run('token')
emoji
correspond à la classe Emoji de discord.py.
role
correspond à la classe Role de discord.py.
Enfin, exécute le fichier main.py
.
- Windows
- Autre
$ py -3 main.py
$ python3 main.py
Voici la requête API à envoyer. Vous pouvez aussi consulter cela sur la documentation officielle de l'API.
Requête PATCH sur https://discord.com/api/v9/guilds/{guildID}/emojis/{emojiID}
{
"Authorization": "Bot {token}"
}
{
"roles": ["roleID"]
}
curl -XPATCH -H 'Authorization: "Bot {token}"' -H "Content-type: application/json" -d '{
"roles": ["roleID"]
}' 'https://discord.com/api/v9/guilds/{guildID}/emojis/{emojiID}'
À quoi ça sert ?
Nous y voyons plusieurs cas d'utilisation pour ton serveur :
- Créer des émojis restreints à des boosters, des donateurs ou des rôles de niveaux pour récompenser tes membres de leur contribution.
- Empêcher les nouveaux membres de ton serveur de télécharger tes émojis et de les réutiliser par la suite. (Sur Discord, tes émojis t'appartiennent, si quelqu'un te les vole, il peut être sanctionné suite à une requête DMCA).
Si tu souhaites être au courant de la sortie de nouvelles fonctionnalités, je t'invite à rejoindre notre serveur Discord et à t'abonner à nos annonces.