Elezthem
@Elezthem
Full Stack Developer

Discord бот не видит файл «prefix.txt», как решить?

Я хочу сделать чтобы при помощи команды можно было менять префикс, вот меняет префикс в файле, но он должен был перезапуститься и вывести в консоле что перезапустился, но выводит ошибку что нету файла "prefix.txt"

Code
import os

intents = nextcord.Intents.all()
prefixintial = open( "prefix.txt", "r").readline(1)
prefix = prefixintial
bot = commands.Bot(command_prefix=prefixintial, intents=intents)
bot.remove_command("help")

@bot.command(aliases = ["prefix"])
async def write_prefix(ctx, *, prefixsetup = None):
	if prefixsetup == None:
		massnoprefix = await ctx.send(f"Вы не указали префикс!")
		await asyncio.sleep(8)
		await massnoprefix.delete()
	else:
		openPrefixFile = open("prefix.txt", "w") # открываем файл prefix.txt метадом write Тоесть записи.
		writingprefix = openPrefixFile.write(prefixsetup) #Ну а тут мы записываем в открытый файл prefix.txt записываем пременую prefixsetup где мы указали префикс для записи в файл.
		await ctx.send(f"Префикс изменён на > {prefixsetup} < Что бы применить видите {prefixintial}reload")
		await client.change_presence(status = nextcord.Status.idle, activity = nextcord.Activity( type =nextcord.ActivityType.watching, name = f"{prefix}reload"))

@bot.command(aliases = ["reload"])
async def reloadbot(ctx):
	embed = nextcord.Embed(title = f"Бот", description = "-Перезапуск", color = 0xf5ce42)
	embedmas = await ctx.send(embed=embed)
	await asyncio.sleep(2)
	await embedmas.delete()
	await os.execv(sys.executable, ["python"] + sys.argv)


Error
PS C:\Users\hendr\OneDrive\Рабочий стол\Akimo> python: can't open file 'c:\\Users\\hendr\\OneDrive\\Рабочий': [Errno 2] No such file or directory
  • Вопрос задан
  • 234 просмотра
Решения вопроса 3
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Спросите там, где вы взяли код.
Ответ написан
Vindicar
@Vindicar
RTFM!
Ну я бы сказал, зачем это вообще?
Во-первых, дискорд активно подталкивает ботов на использование слэш-команд, которым префикс не нужен.
Во-вторых, дискорд.пи и его клоны типа nextcord имеют параметр бота command_prefix. Если таки осилить открыть документацию, то найдём там такое:
The command prefix is what the message content must contain initially to have a command invoked. This prefix could either be a string to indicate what the prefix should be, or a callable that takes in the bot as its first parameter and nextcord.Message as its second parameter and returns the prefix.


Т.е. вместо тупо строки префикса можно передать функцию вида def prefix_func(bot, message) -> str:, которая будет вызываться для каждого сообщения, и возвращать желаемую строку префикса. Это не только позволяет менять префикс динамически, не трогая бота (бот как дёргал функцию, так и будет дёргать), но и позволяет делать вещи типа "свой префикс у разных серверов".

И никаких велосипедов изобретать не потребуется. Всё уже придумано.
Ответ написан
@TheDigitalMadness
Программист
Проверь название файла. Также проверь, если файл типа txt, но в названии ".txt" нету, то и при открытии нужно писать open("prefix", "r")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы