为啥当我在 discord bot 上执行命令时啥也没发生

Posted

技术标签:

【中文标题】为啥当我在 discord bot 上执行命令时啥也没发生【英文标题】:why nothing happens when I execute commands on the discord bot为什么当我在 discord bot 上执行命令时什么也没发生 【发布时间】:2021-07-14 21:52:24 【问题描述】:

我在这里遇到了这段代码的问题...我从编程开始,这个不和谐机器人是我的第一个更大的项目,我想学习它

# bot.py
import os
import random
import discord
import time
import sys
import logging

from discord.ext import commands
from dotenv import load_dotenv

# importing your Discord Token
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

# create bot var and prefix
bot = commands.Bot(command_prefix='h!')

logger = logging.getLogger('discord')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='discord.log', encoding = 'utf-8', mode='w')
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler)

def restart_bot():
    python = sys.executable()
    os.execl(python, python, * sys.argv)

@bot.event
async def on_ready():
    print(f'bot.user.name has connected to Discord!')
    channel = discord.utils.get(bot.get_all_channels(), name='testl')
    await channel.send("Ich bin wieder da")

@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.errors.CheckFailure):
        await ctx.send('Du hast die benötigten Rechte nicht!')

@bot.command(name='69', help='Just nice!')
async def six_nine(ctx):
    await ctx.send('nice!')

@bot.command(name='roll-dice', help='(würfel, augen) simuliert einen würfel')
async def roll_dice(ctx, number_of_dices, number_of_sides):
    dice = [
        str(random.choice(range(1, number_of_sides)))
        for _ in range(number_of_dices)
    ]
    await ctx.send(', '.join(dice))

@bot.command(name='relaod', help='startet einmal den bot neu')
async def bot_reload(ctx):
    await ctx.message.delete()
    message = await ctx.send("Starte neu, gib mir 5 Sekunden")
    restart_bot()


@bot.command(name='create-voice', help='Erstellt einen Voice channel')
@commands.has_role('Admin')
async def create_channel(ctx, channel_name="Default Channel"):
    guild = ctx.guild
    existing_channel = discord.utils.get(guild.channels, name=channel_name)
    if not existing_channel:
        print(f'Erstelle den Spach-channel "channel_name"')
        await guild.create_voice_channel(channel_name)

if __name__ == "__main__":
    bot.run(TOKEN)

一切正常,直到我添加了重新加载/重启功能 之后不再起作用,机器人启动,并调用 on_ready() 函数,但在不和谐中,如果您需要日志文件,我无法发出任何命令让我知道

logger = logging.getLogger('discord')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='discord.log', encoding = 'utf-8', mode='w')
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler)

    def restart_bot():
        python = sys.executable()
        os.execl(python, python, * sys.argv)
    @bot.command(name='relaod', help='startet einmal den bot neu')
    async def bot_reload(ctx):
        await ctx.message.delete()
        message = await ctx.send("Starte neu, gib mir 5 Sekunden")
        restart_bot()
    @bot.command(name='relaod', help='startet einmal den bot neu')
    async def bot_reload(ctx):
        await ctx.message.delete()
        message = await ctx.send("Starte neu, gib mir 5 Sekunden")
        restart_bot()

这就是我在它停止工作之前添加的所有代码

【问题讨论】:

哇,这么多代码。您能否缩短一点以帮助我们缩小错误范围? @knosmos 这样吗? 尝试使用os.execv(sys.argv[0], sys.argv) 代替os.execl 仍然没有命令工作 问题解决了吗? 【参考方案1】:

我不太了解代码,但如果您还没有尝试,请在新窗口中执行代码,然后关闭当前窗口。这可以通过以下方式完成:

import os
os.system('YourBot.py')
os.exit()

我不能 100% 确定这会奏效,但您可以试一试。

【讨论】:

这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review @webknjaz 我只是尽力帮助某人,我给出了一个我认为可行的答案。如果它不起作用,我很抱歉,但我只能帮助别人。提问者还没有要求澄清,

以上是关于为啥当我在 discord bot 上执行命令时啥也没发生的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个参数插入discord bot命令python

为啥当我在导航控制器中重置视图控制器的框架时啥也没发生

Discord Bot 构建在 Heroku 上不断崩溃

discord bot帮助命令没有做任何事情

为啥我的 Heroku discord bot 没有上线?

在 Heroku 上使用 python discord bot 调用 C 二进制文件