web-dev-qa-db-ja.com

サーバーに参加する方法は?

Pythonで不和なボットをセットアップしようとしています。ボットを参加させたい既存の不一致サーバーがありますが、そのために苦労しています。

import discord
import asyncio
import logging

logging.basicConfig(level=logging.INFO)

client = discord.Client()

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')
    print(client)


@client.event
async def on_message(message):
    print(message)
    if message.content.startswith('!test'):
        counter = 0
        tmp = await client.send_message(message.channel, 'Calculating messages...')
        async for log in client.logs_from(message.channel, limit=100):
            if log.author == message.author:
                counter += 1

        await client.edit_message(tmp, 'You have {} messages.'.format(counter))
    Elif message.content.startswith('!sleep'):
        await asyncio.sleep(5)
        await client.send_message(message.channel, 'Done sleeping')

client.run('token')

これは基本的に、GitHubページに記載されている基本的なdiscord.pyスクリプトです。ただし、実際にサーバーに参加させる方法はわかりません。この行をon_ready関数に挿入する場合:

server = await client.accept_invite('instant-invite-code')

「instant-invite-code」を実際のインスタント招待コードに置き換えて(discord.gg/codeとcodeの両方を試しました)、

discord.errors.Forbidden: FORBIDDEN (status code: 403): Bots cannot use this endpoint

ロギングは実際に機能します。ユーザー名とIDが出力されます。ボットは不一致APIに登録されており、既にトークンを持っています。

26
Laxsnor

私もこれに問題がありました。あなたがする必要があるのは:

  1. Discord developer pages (まだログインしていない場合はログイン)に移動します。
  2. チャンネルに追加するボットのあるアプリケーションに移動します。
  3. クライアント/アプリケーションIDをコピーします。
  4. https://discordapp.com/oauth2/authorize?client_id=CLIENT_ID_GOES_HERE&scope=bot&permissions= <ここにボットの権限を設定できます。 ここで権限を計算できます
  5. サーバーを選択し、承認をクリックします。

これで、ボットはサーバーのメンバーになり、指定したコマンドに応答します。例!指定したコードでテストします。

編集:許可リンク( 1 )を使用して、必要なURL全体を生成できるようになりました。

64
Elthan

次のようにコードを編集することをお勧めします。

    @client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('Invite: https://discordapp.com/oauth2/authorize?client_id={}&scope=bot'.format(client.user.id))
    print('------')

これが最良かつ最も簡単なソリューションだと思います。わたしにはできる。

編集:Discordは実際に独自のOAuth2 URLジェネレータを作成したので、それを使用します。 https://discordapp.com/developers/tools/oauth2-url-generator

2
Johnystar