为啥当我在 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 上执行命令时啥也没发生的主要内容,如果未能解决你的问题,请参考以下文章