discord.py(最新)でスクリーンショットを撮ってくれるbotを作る

2022/04/28に公開
1

※この記事はT-taku氏が作ったのをplaywrightバージョンに書き換えたものです。

今回完成させるもの

Discordでサイトのスクリーンショットを撮ってくれるbotを作る。

こちらの記事にあるのをplaywrightバージョンに書き換えよう。

環境

  • Ubuntu(Windowsでもいい)
  • Python3.10
  • discord.py v2.0.0
  • playwright

pipのインストール

pip3 install playwright
pip3 install discord.py

セットアップ

playwrightのセットアップをしよう

playwright install chromium
playwright install-deps chromium

実装

import discord
from discord import app_commands
from playwright.async_api import async_playwright


client = discord.Client()
tree = app_commands.CommandTree()

@client.event
async def on_ready():
    print("login")
    print(client.user.name)
    print(client.user.id)
    # Client側とApi側を同期
    await tree.sync()
    
@tree.command(description="スクリーンショットを撮ります")
@app_commands.describe(url="URLをここに")
async def ss(interaction, url: str):
    # 考え中にする
    await interaction.response.defer()
    # ブラウザーの起動およびスクリーンショット
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto(url)
        data = await page.screenshot(path="image.png")
        await browser.close()
        embed = discord.Embed(title="スクリーンショット")
        embed.set_image(url='attachment://image.png')
        # 送信
        await interaction.followup.send(file=discord.File("image.png"), embed=embed)
        
        
client.run("token")

結果

result

感想

多分seleniumより速いし、いいと思う.

GitHubで編集を提案

Discussion

tuna2134tuna2134

discord.py v2.0.0がリリースしたので少し書き換えました。