Ошибка в токене ,не понимаю почему, выдает '' Token is invalid! It must be 'str' type instead of type."
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)`
Ответы (3 шт):
Попробуйте создать отдельный python файл и создать в нём переменную с токеном так:
token = 'ваш_токен'
после импортируйте токен из нового файла в ваш основной, вместо того, чтобы пытаться достать его из системы через os:
from созданный_файл import token
bot = Bot(token=token)
Проблема в том, что вы пытаетесь прочитать переменную из os.getenv, которой не существует.
Ваш код может выглядеть примерно так:
# тут импорты...
import os
bot = Bot(token=os.getenv('5737447:Auyfufy8786HjhYddyty627397'))
dp = Dispatcher(bot)
# тут главный код...
(токен выдуман)
который пытается прочитать переменную 5737447:Auyfufy8786HjhYddyty627397 из окружения (например, Bash).
Разве это правильно? Нет. Поэтому есть несколько вариантов решения именно этой проблемы:
Во всех последующих примерах, замените 5737447:Auyfufy8786HjhYddyty627397 на свой токен.
Либо сделать переменную окружения:
Когда вы запускаете скрипт, передайте переменную окружения:
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'))Либо просто вставить токен в файл, и "не париться": Замените в файле это:
bot = Bot(token=os.getenv('5737447:Auyfufy8786HjhYddyty627397'))на это:
bot = Bot(token='5737447:Auyfufy8786HjhYddyty627397')Что я сделал? Я просто убрал
os.getenv()из кода. Так тоже будет работать.В ответе от @Владислав Новосёлов есть работающий способ. Можно также использовать его.
Решение оказалось супер простое
bot = Bot(token=os.getenv('TOKEN'))
при таком вызове TOKEN будет None, для того чтобы токен корректно передавался из .env прежде чем передавать оттуда данные стоит загрузить их в проект командами
from dotenv import load_dotenv
и в теле проекта до вызова токена прописать
load_dotenv()