【Python】TweepyとDiscordpyを組み合わせてDiscordからツイートしてみた

初めましての方は初めまして。カラボンです。
今回はDiscordからツイートする方法を教えていきます。

ん？なんでDiscordからツイート出来る様にしたんだって？
Discordからツイートできたら色々と便利じゃんと思ったからだよ（）

とまあ、とりあえず紹介します。

<b>1.Twitter developersのアカウントを申請する</b>
自分で認証の仕方を調べて申請し、認証されるまで待ちましょう
https://developer.twitter.com/
ここで申請ができます。

<b>2.Twitter Developers Portalで新しいアプリを作成する。</b>
APIキーなどは後で使うので保存しておいてください。

<b>3.Discord developersでbotを作る</b>
https://discord.com/developers/applications
ここで作れます。
ここも同じくアクセストークンを保存しておいてください。

<b>4.pythonをPCにインストール</b>
https://www.python.org/
ここから最新バージョンをインストール。
セットアップ時にパスの設定も忘れずに。

<b>5.Windows+Rキーでシェルを開きcmdを入力しコマンドプロンプトを開く。</b>
だいたいこんな感じ。
![windowsshell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086026/3d35a972-f20f-9a03-583d-0c3e5842114d.png)


<b>6.コマンドプロンプトでpip install tweepyを入力し実行しインストールする。</b>
このように表示されればOK。![tweepy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086026/cf0b4fdf-0206-7e05-3c51-d4e21354362e.png)

```

pip install tweepy
```

コマンドはこれ。

<b>7.同様にコマンドプロンプトでpip install discordpyを入力しインストールする。</b>

```

pip install discord
```

これでインストール可能。
先程のように表示されればインストールが完了した証。
ちなみにdiscord for pythonはpython3以上ではないとインストールできない模様。

<b>8.以下のライブラリのインストールが完了したらpythonの新規プログラムを作成する。</b>
ファイルの名前は何でもヨシ！（基本は何でも良いが自分で分かりやすいファイル名にしましょう。）

<b>9.以下のプログラムをコピペ</b>
※アクセストークンなどは自分のに置き換えてください。


<b>解説</b>

・必要なものをimportでインポート。

```python
import tweepy
import discord
import datetime
import time
```

・色々と代入し接続する。

```python
now = datetime.datetime.now()

TOKEN = 'Discordのボットのトークン'
consumer_key='コンシューマキー（新：APIキー）'
consumer_key_secret='コンシューマーキーシークレット（新：APIキーシークレット）'
access_token='アクセストークン'
access_token_secret='アクセストークンシークレット'

auth = tweepy.OAuthHandler(consumer_key, consumer_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
redirect_url = auth.get_authorization_url()
print(redirect_url)

client = discord.Client()

notice_channel_id = Discordのログイン通知を表示させたいチャンネルのIDをペースト
```

・設定したチャンネルにログイン通知を送信。

```python
async def greet():
    channel = client.get_channel(notice_channel_id)
    print("ログインしました。\n")
    print(now)
    await channel.send('ログインしました。')
    await channel.send(now)

@client.event
async def on_ready():
    await greet() 
```
・/tweetコマンドでツイートする処理。

```python

async def on_message(message):
    if message.author.bot:
        return

    def check(msg):
        return msg.author == message.author

    if message.content == '/tweet':
        if message.author.guild_permissions.administrator:
            await message.channel.send('ツイートする内容を送信してください。')
            wait_message = await client.wait_for("message",check=check)
            api.update_status(wait_message.content)
            await message.channel.send('ツイートを送信しました。')
```
・最後の宣言。

```python
client.run(TOKEN)
```

最終的なプログラム。

```example_twitter_and_discord.py
import tweepy
import discord
import datetime
import time

now = datetime.datetime.now()

TOKEN = 'Discordのボットのトークン'
consumer_key='コンシューマキー（新：APIキー）'
consumer_key_secret='コンシューマキーシークレット（新：APIキーシークレット）'
access_token='アクセストークン'
access_token_secret='アクセストークンシークレット'

auth = tweepy.OAuthHandler(consumer_key, consumer_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
redirect_url = auth.get_authorization_url()
print(redirect_url)

client = discord.Client()

notice_channel_id = Discordのログイン通知を表示させたいチャンネルのIDをペースト

async def greet():
    channel = client.get_channel(notice_channel_id)
    print("ログインしました。\n")
    print(now)
    await channel.send('ログインしました。')
    await channel.send(now)

@client.event
async def on_ready():
    await greet() 

async def on_message(message):
    if message.author.bot:
        return

    def check(msg):
        return msg.author == message.author

    if message.content == '/tweet':
        if message.author.guild_permissions.administrator:
            await message.channel.send('ツイートする内容を送信してください。')
            wait_message = await client.wait_for("message",check=check)
            api.update_status(wait_message.content)
            await message.channel.send('ツイートを送信しました。')

client.run(TOKEN)
```
今はツイートが送信できるだけですが、今後アップデートし、タイムラインの表示やいいねとリツイート機能などを追加するつもりです。
バグなどがあればコメント欄で教えてください。

2021/3/25 19:23追記:

https://github.com/Hashibutogarasu/Twitter-forDiscord

GitHubにコードをアップロードしました。