A Discord chat exporter that is easy to use and customizable. // Un exporteur de chat Discord facile à utiliser et personnalisable.
Project description
Discord Channel To html Transcripts
Avant toute chose, je tiens à préciser que le code de base n'est pas à moi. Je l'ai trouvé ici: https://github.com/FroostySnoowman/py-discord-html-transcripts .
Prérequis
discord.py v2.4.0 ou plus récent
Installation
Pour installer la librairie dans votre environnement virtuel, pour une utilisation avec un bot, exécutez la commande :
pip install discord-channel-to-html-transcripts
NOTE : Cette librairie est un plugin pour discord.py et ne fonctionne pas seule. Vous devez avoir un bot discord.py fonctionnel pour utiliser cette librairie.
Utilisation
Il y a actuellement 3 méthodes (fonctions) dans chat-exporter que vous pouvez utiliser pour exporter votre conversation.
Développez les blocs ci-dessous pour découvrir les fonctions, les arguments et les usages.
Utilisation de base
.quick_export() est la manière la plus simple d'utiliser chat-exporter.
Utiliser la fonction quick_export va récupérer l'historique du salon que vous donnez, construire la transcription puis poster le fichier et l'embed directement dans le salon - retournant un objet message récupéré du message qu'il a posté.
Ceci est principalement vu comme une fonction de démonstration, par opposition à une commande que vous devriez réellement utiliser.
Argument(s) requis :
channel: Objet discord.TextChannel, que ce soit ctx.channel ou n'importe quel salon que vous récupérez.
Argument(s) optionnel(s) :
bot: Objet commands.Bot pour récupérer les membres qui ne sont plus dans votre guilde.
Argument de retour :
discord.Message: Le message que quick_export enverra, contenant l'embed et le fichier de conversation exporté.
Exemple :
import discord
import chat_exporter
from discord.ext import commands
intents = discord.Intents.default()
intents.members = True
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
...
@bot.command()
async def save(ctx: commands.Context):
await chat_exporter.quick_export(ctx.channel)
...
Utilisation personnalisable
.export() est la méthode la plus efficace et flexible pour exporter une conversation en utilisant chat-exporter.
Utiliser la fonction export va générer une transcription en utilisant le salon que vous passez, ainsi que n'importe quel des kwargs personnalisés passés pour définir des limites, des fuseaux horaires, des formats 24h et plus (listés ci-dessous).
Ce serait la fonction principale à utiliser dans chat-exporter.
Argument(s) requis :
channel: Objet discord.TextChannel, que ce soit ctx.channel ou n'importe quel salon que vous récupérez.
Argument(s) optionnel(s) :
limit: Valeur entière pour définir la limite (quantité de messages) que l'exportateur de conversation récupère lors de la récupération de l'historique (défaut=illimité).
tz_info: Valeur de chaîne d'un nom de base de données TZ pour définir un fuseau horaire personnalisé pour les messages exportés (défaut=UTC)
guild: Objet discord.Guild qui peut être passé pour résoudre des bugs pour certaines forks
military_time: Valeur booléenne pour définir un format 24h pour les heures dans votre conversation exportée (défaut=False | format 12h)
fancy_times: Valeur booléenne qui active/désactive les 'fancy times' (Aujourd'hui|Hier|Jour)
before: Objet datetime.datetime qui permet de récupérer les messages d'avant une certaine date
after: Objet datetime.datetime qui permet de récupérer les messages d'après une certaine date
bot: Objet commands.Bot pour récupérer les membres qui ne sont plus dans votre guilde.
Argument de retour :
transcript: La construction HTML pour que vous puissiez construire le fichier HTML avec Discord.
Exemple :
import io
...
@bot.command()
async def save(ctx: commands.Context, limit: int = 100, tz_info: str = "UTC", military_time: bool = True):
transcript = await chat_exporter.export(
ctx.channel,
limit=limit,
tz_info=tz_info,
military_time=military_time,
bot=bot,
)
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
await ctx.send(file=transcript_file)
Utilisation brute
.raw_export() est pour les fous qui aiment faire leur propre truc en utilisant chat-exporter.
Utiliser la fonction raw_export va générer une transcription en utilisant la liste de messages que vous passez, ainsi que n'importe quel des kwargs personnalisés passés pour définir des limites, des fuseaux horaires, des formats 24h et plus (listés ci-dessous).
Ce serait pour les personnes qui veulent filtrer le contenu à exporter.
Argument(s) requis :
channel: Objet discord.TextChannel, que ce soit ctx.channel ou n'importe quel salon que vous récupérez (ceci est juste pour le remplissage de l'en-tête).
messages: Une liste d'objets Message que vous souhaitez exporter dans un fichier HTML.
Argument(s) optionnel(s) :
tz_info: Valeur de chaîne d'un nom de base de données TZ pour définir un fuseau horaire personnalisé pour les messages exportés (défaut=UTC)
military_time: Valeur booléenne pour définir un format 24h pour les heures dans votre conversation exportée (défaut=False | format 12h)
fancy_times: Valeur booléenne qui active/désactive les 'fancy times' (Aujourd'hui|Hier|Jour)
bot: Objet commands.Bot pour récupérer les membres qui ne sont plus dans votre guilde.
Argument de retour :
transcript: La construction HTML pour que vous puissiez construire le fichier HTML avec Discord.
Exemple :
import io
...
@bot.command()
async def purge(ctx: commands.Context, tz_info: str, military_time: bool):
deleted_messages = await ctx.channel.purge()
transcript = await chat_exporter.raw_export(
ctx.channel,
messages=deleted_messages,
tz_info=tz_info,
military_time=military_time,
bot=bot,
)
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
await ctx.send(file=transcript_file)
Exemples avancés
Sauvegarder les pièces jointes localement
Par défaut, les pièces jointes sont intégrées dans le fichier HTML en utilisant leur URL Discord. Si vous souhaitez les sauvegarder localement, vous pouvez utiliser le AttachmentToLocalFileHostHandler.
Exemple :
import io
import os
import chat_exporter
from chat_exporter.construct.attachment_handler import AttachmentToLocalFileHostHandler
...
@bot.command()
async def save_with_attachments(ctx: commands.Context):
if not os.path.exists(f"attachments/{ctx.channel.id}"):
os.makedirs(f"attachments/{ctx.channel.id}")
transcript = await chat_exporter.export(
ctx.channel,
attachment_handler=AttachmentToLocalFileHostHandler(
path=f"attachments/{ctx.channel.id}"
),
bot=bot,
)
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
await ctx.send(file=transcript_file)
Exporter un intervalle de dates spécifique
Vous pouvez utiliser les paramètres before et after pour exporter les messages d'un intervalle de dates spécifique.
Exemple :
import io
import datetime
...
@bot.command()
async def save_range(ctx: commands.Context):
# Exporter les messages des 7 derniers jours
after_date = datetime.datetime.now() - datetime.timedelta(days=7)
transcript = await chat_exporter.export(
ctx.channel,
after=after_date,
bot=bot,
)
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
await ctx.send(file=transcript_file)
Utilisation dans un Cog
Pour garder votre code organisé, vous pouvez utiliser les Cogs pour regrouper vos commandes. Voici comment vous pouvez utiliser chat-exporter dans un Cog.
Exemple :
import io
import discord
import chat_exporter
from discord.ext import commands
class MyCog(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
@commands.command()
async def save_in_cog(self, ctx: commands.Context):
transcript = await chat_exporter.export(
ctx.channel,
bot=self.bot,
)
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
await ctx.send(file=transcript_file)
async def setup(bot: commands.Bot):
await bot.add_cog(MyCog(bot))
Utilisation avec les commandes d'application
Avec discord.py v2.0 et plus, vous pouvez utiliser les commandes d'application (slash commands). Voici comment vous pouvez utiliser chat-exporter avec elles.
Exemple :
import io
import discord
import chat_exporter
from discord import app_commands
...
@bot.tree.command(name="save_slash", description="Sauvegarde la conversation en utilisant une commande slash.")
@app_commands.describe(channel="Le salon à sauvegarder")
async def save_slash(interaction: discord.Interaction, channel: discord.TextChannel):
await interaction.response.defer()
transcript = await chat_exporter.export(
channel,
bot=bot,
)
if transcript is None:
await interaction.followup.send("Impossible de sauvegarder la conversation.", ephemeral=True)
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{channel.name}.html",
)
await interaction.followup.send(file=transcript_file)
# N'oubliez pas de synchroniser votre arbre de commandes
# @bot.event
# async def on_ready():
# await bot.tree.sync()
Gestion des erreurs
Il est important de gérer les erreurs qui peuvent survenir lors de l'exportation d'une conversation, par exemple lorsque le bot n'a pas les permissions de voir l'historique du salon.
Exemple :
import io
import discord
...
@bot.command()
async def save_safe(ctx: commands.Context):
try:
transcript = await chat_exporter.export(
ctx.channel,
bot=bot,
)
except discord.Forbidden:
await ctx.send("Je n'ai pas la permission de voir l'historique de ce salon.")
return
except Exception as e:
await ctx.send(f"Une erreur est survenue : {e}")
return
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
await ctx.send(file=transcript_file)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file discordtranscript-0.0.9.tar.gz.
File metadata
- Download URL: discordtranscript-0.0.9.tar.gz
- Upload date:
- Size: 24.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
291fce33489ba781359d288a4907d1dfda0860a2ce6a6cef8dad53079c63d0e9
|
|
| MD5 |
1eaf6b73193494c485e44135b9ea0f80
|
|
| BLAKE2b-256 |
c5d4aa9554ae0a4f880492c6580acd404637895e5777f9968cfca252c9ff41da
|
File details
Details for the file discordtranscript-0.0.9-py3-none-any.whl.
File metadata
- Download URL: discordtranscript-0.0.9-py3-none-any.whl
- Upload date:
- Size: 29.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1adc4b34ca4115d50335e3f86496f7377c35fca5f790a28fc62d93e51bbf78ac
|
|
| MD5 |
bffced796f9093ead33bd0ecf2760a3e
|
|
| BLAKE2b-256 |
140ddf78f45caa00b870bba6a623ae5143cc32608b467c60cac9d9916abaa5e0
|