Ошибка в токене ,не понимаю почему, выдает '' Token is invalid! It must be 'str' type instead of <class 'NoneType'> type."

Рейтинг: 0Ответов: 3Опубликовано: 23.06.2023
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

import os

bot = Bot(token=os.getenv('тут токен'))
dp = Dispatcher(bot)
@dp.message_handler()
async def echo_send(message: types.Message):
    await message.answer(message.text)
    # await message.reply(message.text)
    # await bot.send_message(message.from_user.id, mesage.text)
executor.start_polling(dp, skip_updates=True)`

Ответы

▲ 1Принят

Проблема в том, что вы пытаетесь прочитать переменную из os.getenv, которой не существует.

Ваш код может выглядеть примерно так:

# тут импорты...
import os

bot = Bot(token=os.getenv('5737447:Auyfufy8786HjhYddyty627397'))
dp = Dispatcher(bot)
# тут главный код...

(токен выдуман)

который пытается прочитать переменную 5737447:Auyfufy8786HjhYddyty627397 из окружения (например, Bash).


Разве это правильно? Нет. Поэтому есть несколько вариантов решения именно этой проблемы:

Во всех последующих примерах, замените 5737447:Auyfufy8786HjhYddyty627397 на свой токен.

  1. Либо сделать переменную окружения:

    Когда вы запускаете скрипт, передайте переменную окружения:

    TOKEN="5737447:Auyfufy8786HjhYddyty627397" python main.py
    

    или в две строки:

    TOKEN="5737447:Auyfufy8786HjhYddyty627397"
    python main.py
    

    (Вместо main.py поместите настоящее имя файла, в котором написан код бота.)

    А в главном файле, замените это:

    bot = Bot(token=os.getenv('5737447:Auyfufy8786HjhYddyty627397'))
    

    на:

    bot = Bot(token=os.getenv('TOKEN'))
    
  2. Либо просто вставить токен в файл, и "не париться": Замените в файле это:

    bot = Bot(token=os.getenv('5737447:Auyfufy8786HjhYddyty627397'))
    

    на это:

    bot = Bot(token='5737447:Auyfufy8786HjhYddyty627397')
    

    Что я сделал? Я просто убрал os.getenv() из кода. Так тоже будет работать.

  3. В ответе от @Владислав Новосёлов есть работающий способ. Можно также использовать его.

▲ 2

Попробуйте создать отдельный python файл и создать в нём переменную с токеном так:

token = 'ваш_токен'

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

from созданный_файл import token

bot = Bot(token=token)
▲ 0

Решение оказалось супер простое

bot = Bot(token=os.getenv('TOKEN'))

при таком вызове TOKEN будет None, для того чтобы токен корректно передавался из .env прежде чем передавать оттуда данные стоит загрузить их в проект командами

from dotenv import load_dotenv

и в теле проекта до вызова токена прописать

load_dotenv()