async def METHOD_NAME(self, ctx: Context):
    await ctx.defer(ephemeral=True)
    # ratelimit
    if self.last_summary_dict.get(ctx.channel.id) is not None and (datetime.now(timezone.utc) - self.last_summary_dict.get(ctx.channel.id)) < timedelta(minutes=15):
        await ctx.send("You can only summarize once every 15 minutes.", ephemeral=True)
        return
    if ctx.channel.id not in [405163713063288832, 998627604686979214]:
        await ctx.send("You can't summarize here.", ephemeral=True)
        return
    last_ts = self.last_summary_dict.get(ctx.channel.id) or datetime(2021, 1, 1, tzinfo=timezone.utc)
    response, prompt = await self.prompt_model(ctx.channel, "The following is a short summary of the above chat log:", last_ts)
    e = Embed()
    e.title = "Chat Summarization"
    e.description = response["choices"][0]["text"]
    e.set_footer(text=f"Request cost: ${response['usage']['total_tokens'] / 1000 * 0.02:.2f} | /donate if you like this command")
    # attach the prompt as a file
    f = BytesIO(prompt.encode("utf-8"))
    f.name = "prompt.txt"
    f = File(f, filename=f"prompt_log_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.txt")
    # send message in the channel
    await ctx.send("done")
    await ctx.channel.send(embed=e, file=f)
    self.last_summary_dict[ctx.channel.id] = datetime.now(timezone.utc)