即使代码很好,机器人也停止工作

时间:2021-07-28 22:24:35

标签: python discord discord.py python-3.9

这是我第一次编写不和谐机器人,我主要是在学习教程,但我想制作一个独特的游戏,所以我尝试自己制作。但是在搞了一段时间之后,我意识到我的代码中唯一有效的部分是 mcguccy 是一个白痴部分,而不是客户端。命令部分工作。

import discord
from discord.ext import commands

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


@client.command()
async def ping1(ctx):
    await ctx.send("pong!")


@client.event
async def on_ready():
    await client.change_presence(status=discord.Status.online, activity=discord.Game("cranking 90s on shitters"))
    print("bot is ready!")


@client.event
async def on_member_join(member):
    print(f'{member} has joined :weary:.')


@client.event
async def on_member_remove(member):
    print(f'{member} has left :weary:')


@client.command()
async def helb(ctx):
    await ctx.send('@everyone look at this idiot')


@client.command()
async def ping(ctx):
    await ctx.send(f'here you go: {round(client.latency * 1000)}ms')


@client.command()
async def commands(ctx):
    await ctx.send('1. helb it will help you. 2. ping it will tell you the bots ping. ')


@client.command()
async def overlord(ctx):
    await ctx.send("muah hah hah YOUR SERVER IS MINE")

keywords = ["mcguccy is an idiot", "kick mcguccy", "i want to nuke the server"]


@client.event
async def on_message(message):
    for i in range(len(keywords)):
        if keywords[i] in message.content:
            for j in range(20):
                await message.channel.send(f"@everyone someone has spammed :weary:")

1 个答案:

答案 0 :(得分:0)

这里有几点需要注意:

您的 client 变量是 Bot 类型,而不是 {{ 1}} 类型。

Client

这意味着您需要使用 client = commands.Bot(command_prefix='!') 装饰器而不是 @bot 装饰器:

@client

永远不会调用 @client.command() async def helb(ctx): ... # Becomes @bot.command() async def helb(ctx): ... 方法。

因此,机器人的事件循环不会启动。您需要初始化 Client event loop 以便机器人可以侦听要传递的命令:

.run()

该代码必须是文件中运行的最后一条语句,因为它会阻塞。

if __name__=='__main__': client.run(TOKEN) 命令需要 API 令牌。

如果您还没有该令牌,可以通过 creating a bot account 获得该令牌。如果确实有,则需要将其作为第一个参数传递给 .run() 方法。