【Discord.py】ボイスチャンネルの招待メッセージを送信する

#はじめに
###投稿者の自己紹介
どうもまぬおです！discord.pyでBotを開発しています。よろしくお願いします

###お知らせ
[Discord Bot Advent Calendar 2020](https://qiita.com/advent-calendar/2020/discordbot)
この記事はDiscord Bot Advent Calendarの3日目の記事です。ほかの方の投稿もぜひご覧になってください

[1日目【Discord.py】Discord.py 1.5で追加されたIntentsを攻略する](https://qiita.com/manuo/items/7f62dc2f1e0a801a0708)
[2日目【Discord.py】チャンネルを持ったカテゴリを作成する](https://qiita.com/manuo/items/0723b9d47bddd755ea76)

他の日にも投稿しています。たくさんのViewありがとうございます！
良ければ、LGTMもよろしくお願いします！

###今回のテーマ
この記事は[前回](https://qiita.com/manuo/items/0723b9d47bddd755ea76)の続きです。前回は、ボイスチャンネルとテキストチャンネルを含んだカテゴリを作成するコマンドを作成しました。今回は、作成した後にボイスチャンネルへ**招待メッセージ**を送信する方法について紹介します

また、この記事はある程度Botを開発したことがある**中級者向け**の記事になっています。Botの開発を始める方法などは書きませんので注意してください
初心者の方には、別の方が書いていただいた初心者向けの記事があります
ボクもこの記事からDiscord Bot開発を勉強し始めましたのでおすすめです！

[PythonでDiscordBotを書く方法](https://qiita.com/1ntegrale9/items/9d570ef8175cf178468f)
##招待メッセージとは
![スクリーンショット 2020-12-03 005540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/8d1298dd-1749-4695-bfe9-ed8b453c45c2.png)
招待メッセージはこういうものです
ボイスチャンネルに参加のボタンを押すと、ボイスチャンネルに参加することができます
###招待メッセージを手動で出してみる
まずは、手動で出す方法を見てみます
ボイスチャットを右クリックし、**友達を招待**を選びます
![スクリーンショット 2020-12-03 012057.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/35cbe369-415f-f09e-b9bd-593323d94fc5.png)
現れたメニューからURLをコピーして、テキストチャットに張り付けることで先ほどの招待メッセージを出すことができます
また、フレンドの名前の横の招待ボタンを押すと、フレンドのDMにワンクリックで招待メッセージを送ることもできます
URLは`https://discord.gg/xxxxxxxx`の形になります
![syoutai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/d23a98ad-1ef3-2f62-0594-9a6dc0db9f9e.png)
この一連の作業が、招待の作成です。次はこれをBotにさせてみます
###Botのターン
Botが招待を作成する[関数](https://discordpy.readthedocs.io/ja/latest/api.html#discord.VoiceChannel.create_invite)は[VoiceChannel](https://discordpy.readthedocs.io/ja/latest/api.html#voicechannel)が持っています
[create_invite()](https://discordpy.readthedocs.io/ja/latest/api.html#discord.VoiceChannel.create_invite)関数を呼ぶことで招待を作成することができます
戻り値は[Invite](https://discordpy.readthedocs.io/ja/latest/api.html#invite)が返ってきます。この変数でいろいろするわけですね

~~~ python3
#招待を作成する
Invite = await VoiceChannel.create_invite()
~~~
この[Invite](https://discordpy.readthedocs.io/ja/latest/api.html#invite)にある[url](https://discordpy.readthedocs.io/ja/latest/api.html#discord.Invite.url)変数が`https://discord.gg/xxxxxxxx`の文字列を持っています

~~~ python3
#招待URLを取得する
URLstr = Invite.url
~~~
このURLをテキストチャンネルに発言すれば、招待メッセージを送ることができそうです
##招待メッセージを発言する
###前回のコード

~~~python3
import discord
from discord.ext import commands

TOKEN = "TOKEN"

client = commands.Bot(command_prefix = "!")

@client.command()
async def lobby(ctx, arg):
    LobbyName = arg
    Guild = ctx.guild

    # カテゴリを作成する
    Category = await Guild.create_category(LobbyName)

    # チャンネルの作成時にカテゴリを設定する
    await Category.create_text_channel("テキストチャンネル")
    await Category.create_voice_channel("ボイスチャンネル1")
    await Category.create_voice_channel("ボイスチャンネル2")

client.run(TOKEN)
~~~
[前回](https://qiita.com/manuo/items/0723b9d47bddd755ea76#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B)、コマンドを打つとロビーを作成するところまで実装しました
ここに招待メッセージを発言する処理を追加します

~~~python3
import discord
from discord.ext import commands

TOKEN = "TOKEN"

client = commands.Bot(command_prefix = "!")

@client.command()
async def lobby(ctx, arg):
    LobbyName = arg
    Guild = ctx.guild

    # カテゴリを作成する
    Category = await Guild.create_category(LobbyName)

    # チャンネルの作成時にカテゴリを設定する
    await Category.create_text_channel("テキストチャンネル")
    await Category.create_voice_channel("ボイスチャンネル1")
    await Category.create_voice_channel("ボイスチャンネル2")

    # 招待を作成する
    Invite = await VoiceChannel1.create_invite()

    # 招待メッセージを発言する
    Channel = ctx.message.channel
    await Channel.send(Invite.url)

client.run(TOKEN)
~~~
これで、招待メッセージの送信の処理完成です
見てみましょう
![result.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527954/e2dc2717-81a8-7a2c-ea38-33ee7ecaa1a6.gif)
Botが招待メッセージを送信していることが確認できます
この機能の追加で、ボイスチャンネルへの参加がわかりやすくなりました
ちなみにBotがメッセージを送るには`Send Messages`の権限が必要です
##おわりに
###返答機能はわかりやすい
今回はコマンド実行時のレスポンスとして、招待メッセージを出す機能を追加しました
[前回](https://qiita.com/manuo/items/0723b9d47bddd755ea76)の機能の実行結果はチャンネルの作成のみだったので、結果がテキストチャンネルからはわかり辛かったです
返答があるだけでずいぶん変わるものですね
###おわりのあいさつ
ここまで読んでいただき、ありがとうございました
この記事がみなさんの開発に役立つと幸いです
それでは良いDiscord Bot開発ライフを！
###各種バージョン
Python3 : 3.6.9
Discord.py : 1.5.1