如何加入一个服务器?

34

我正在尝试使用Python设置Discord机器人。 我有一个预先存在的Discord服务器,希望机器人加入该服务器,但是我很难做到。

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的输出。我的机器人已在Discord API上注册,并且我已经拥有一个令牌。


据我所知,您必须使用桌面应用程序或浏览器以您的机器人账户加入服务器。一旦这样做,机器人将会识别出它之前已经加入了该服务器。 - Goodies
所以,我尝试了这个 - 我登录了机器人授权的帐户并加入了正确的服务器,但似乎没有产生影响 - 它仍然没有加入服务器(client.servers的值为[])。 - Laxsnor
我在想,我是否没有以机器人的身份登录- 我已经从账户授权了机器人(并生成了令牌),但我仍然使用电子邮件和密码登录到 Mac 客户端。 - Laxsnor
@Goodies - 有没有一种方法可以在Web界面中使用机器人用户名/ID/令牌实际登录到机器人用户? - Laxsnor
3个回答

72
我也遇到了一些问题。你需要做的是:
  1. 前往Discord开发者页面(如果没有登录,请先登录)。
  2. 进入您想要添加到频道的机器人所在的应用程序。
  3. 复制客户端/应用程序ID。
  4. 前往https://discordapp.com/oauth2/authorize?client_id=CLIENT_ID_GOES_HERE&scope=bot&permissions=0 < 您可以在此设置机器人的权限。此处可以计算权限
  5. 选择服务器并点击授权。

现在您的机器人将成为该服务器的成员,并响应您给予它的命令。例如,在您提供的代码中输入 !test。

编辑:现在您可以使用权限链接(1)来生成整个所需的URL。


我曾经使用过这个,但即使我在服务器上拥有所有权限,它也无法正常工作。然而,当服务器的实际创建者操作时,它却可以正常工作。你知道为什么吗? - zondo
1
您需要拥有“管理服务器”权限才能将机器人添加到服务器。这可以防止随意用户添加自己的机器人,这是在机器人账户不存在时存在的问题。 - Sam Rockett

3

2

我建议将代码编辑为这样:

    @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


1
仅适用于在Bot和Client ID合并之前创建的机器人无法正常工作。 - Sam Rockett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接