Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
chat-exporter-hikari
Advanced tools
To install the library to your virtual environment, for bot usage, run the command:
pip install chat-exporter-hikari
To clone the repository locally, run the command:
git clone https://github.com/h4ckd0tm3/DiscordChatExporterPy-hikari
There are currently 3 methods (functions) to chat-exporter
which you can use to export your chat.
Expand the blocks below to learn the functions, arguments and usages.
.quick_export()
is the simplest way of using chat-exporter.
Using the quick_export function will gather the history of the channel you give, build the transcript then post the file and embed directly to the channel - returning a message object gathered from the message it posted.
This is mostly seen as a demo function, as opposed to a command you should actually use.
Required Argument(s):
channel
: hikari.channels.PartialChannel
object, whether ctx.channel
or any channel you gather.
Optional Argument(s):
bot
: commands.Bot
object to gather members who are no longer in your guild.
Return Argument:
hikari.messages.Message
: The message quick_export will send, containing the embed and exported chat file.
Example:
import hikari
import lightbulb
import chat_exporter
bot = lightbulb.BotApp(token="...")
...
@bot.command
@lightbulb.command("save", "Saves current chat transcript.")
@lightbulb.implements(lightbulb.SlashCommand)
async def save(ctx):
await chat_exporter.quick_export(ctx.get_channel())
await ctx.respond("Transcript created!")
...
.export()
is the most efficient and flexible method to export a chat using chat-exporter.
Using the export function will generate a transcript using the channel you pass in, along with using any of the custom kwargs passed in to set limits, timezone, 24h formats and more (listed below).
This would be the main function to use within chat-exporter.
Required Argument(s):
channel
: hikari.channels.PartialChannel
object, whether ctx.channel
or any channel you gather.
Optional Argument(s):
limit
: Integer value to set the limit (amount of messages) the chat exporter gathers when grabbing the history (default=unlimited).
tz_info
: String value of a TZ Database name to set a custom timezone for the exported messages (default=UTC)
military_time
: Boolean value to set a 24h format for times within your exported chat (default=False | 12h format)
fancy_times
: Boolean value which toggles the 'fancy times' (Today|Yesterday|Day)
bot
: commands.Bot
object to gather members who are no longer in your guild.
Return Argument:
transcript
: The HTML build-up for you to construct the HTML File with Discord.
Example:
import io
...
@bot.command
@lightbulb.command("save", "Saves current chat transcript.")
@lightbulb.implements(lightbulb.SlashCommand)
async def save(ctx, limit: int = 100, tz_info: str = "UTC", military_time: bool = True):
channel = ctx.get_channel()
transcript = await chat_exporter.export(
channel,
limit=limit,
tz_info=tz_info,
military_time=military_time,
bot=lightbulb.BotApp)
if transcript is None:
return
transcript_file = hikari.files.Bytes(io.BytesIO(transcript.encode()), f"transcript-{channel.name}.html")
await ctx.respond(transcript_file)
.raw_export()
is for the crazy people who like to do their own thing when using chat-exporter.
Using the raw_export function will generate a transcript using the list of messages you pass in, along with using any of the custom kwargs passed in to set limits, timezone, 24h formats and more (listed below).
This would be for people who want to filter what content to export.
Required Argument(s):
channel
: hikari.channels.PartialChannel
object, whether ctx.channel
or any channel you gather (this is just for padding the header).
messages
: A list of Message objects which you wish to export to an HTML file.
Optional Argument(s):
tz_info
: String value of a TZ Database name to set a custom timezone for the exported messages (default=UTC)
military_time
: Boolean value to set a 24h format for times within your exported chat (default=False | 12h format)
fancy_times
: Boolean value which toggles the 'fancy times' (Today|Yesterday|Day)
bot
: commands.Bot
object to gather members who are no longer in your guild.
Return Argument:
transcript
: The HTML build-up for you to construct the HTML File with Discord.
Example:
import io
...
@bot.command
@lightbulb.command("save", "Saves current chat transcript.")
@lightbulb.implements(lightbulb.SlashCommand)
async def save(ctx, tz_info: str = "UTC", military_time: bool = True):
channel = ctx.get_channel()
messages = ...
transcript = await chat_exporter.raw_export(
channel,
messages=messages,
tz_info=tz_info,
military_time=military_time,
bot=lightbulb.BotApp)
if transcript is None:
return
transcript_file = hikari.files.Bytes(io.BytesIO(transcript.encode()), f"transcript-{channel.name}.html")
await ctx.respond(transcript_file)
Due to these pain, and many requests - I have built a fancy PHP script which will show the transcript file within a browser.
Required Argument(s):
channel
: hikari.channels.PartialChannel
object, whether ctx.channel
or any channel you gather.
message
: The Discord message containing the transcript file
Return Argument:
hikari.messages.Message
: The message quick_link will send, containing the embed.
Example:
import chat_exporter
...
@bot.command()
async def save(ctx: commands.Context):
message = await chat_exporter.quick_export(ctx.channel)
await chat_exporter.quick_link(ctx.channel, message)
Required Argument(s):
message
: The Discord message containing the transcript file
Return Argument:
link
: The link to view the transcript file online
Example:
import io
import chat_exporter
...
@bot.command()
async def save(ctx: commands.Context):
transcript = await chat_exporter.export(ctx.channel)
if transcript is None:
return
transcript_file = discord.File(
io.BytesIO(transcript.encode()),
filename=f"transcript-{ctx.channel.name}.html",
)
message = await ctx.send(file=transcript_file)
link = await chat_exporter.link(message)
await ctx.send("Click this link to view the transcript online: " + link)
Please note that the PHP script does NOT store any information.
It simply makes a request to the given URL and echos (prints) the content for you to be able to view it.
This project borrows CSS and HTML code from Tyrrrz's C# DiscordChatExporter repository.
This project is based on DiscordChatExporterPy, the work of mahtoid.
FAQs
A simple Discord chat exporter for Python Discord bots.
We found that chat-exporter-hikari demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.