Skip to main content

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)

(retour en haut)


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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

discordtranscript-0.0.9.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

discordtranscript-0.0.9-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

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

Hashes for discordtranscript-0.0.9.tar.gz
Algorithm Hash digest
SHA256 291fce33489ba781359d288a4907d1dfda0860a2ce6a6cef8dad53079c63d0e9
MD5 1eaf6b73193494c485e44135b9ea0f80
BLAKE2b-256 c5d4aa9554ae0a4f880492c6580acd404637895e5777f9968cfca252c9ff41da

See more details on using hashes here.

File details

Details for the file discordtranscript-0.0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for discordtranscript-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 1adc4b34ca4115d50335e3f86496f7377c35fca5f790a28fc62d93e51bbf78ac
MD5 bffced796f9093ead33bd0ecf2760a3e
BLAKE2b-256 140ddf78f45caa00b870bba6a623ae5143cc32608b467c60cac9d9916abaa5e0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page