В чём именно затруднение?
Если затрудняетесь написать калькулятор на питоне, то за ботов браться рановато.
Если не уверены, как это состыковать с ботом, подскажу:
def calc(x: str, y: str, op: str) -> str:
...
Опишите калькулятор как функцию такого вида, пусть он принимает три строки (операнды и операцию), а возвращает ответ, который нужно вывести. Как вывести, откуда берутся строки - не его дело.
Основной бот, соответственно, будет заниматься общением с пользователем, а для вычислений будет дёргать эту функцию.
Artemka324234, плохо читал, значит. Повторю ещё раз.
1. Ты обращаешься к inter.message.author, т.е. сначала пытаешься получить inter.message, потом у него взять поле author.
2. inter - экземпляр класса ApplicationCommandInteraction. У него НЕТ поля message.
3. По ссылке дока на этот класс, там можно увидеть, что у этого класса есть поле author, про которое написано "хранит пользователя или участника сервера, отправившего команду".
4. Вывод: нужно обращаться сразу к inter.author
ali5, проверка типов выполняется отдельной операцией, без выполнения кода. Это позволяет выполнять отлов ошибок заранее, но не тратить на это время при выполнении.
При выполнении кода питон игнорирует type hints, разве что сама программа использует интроспекцию для них.
await ctx.send(embed = discord.Embed(description = f"""Баланс **{ctx.author}** состовляет **{cursor.execute("SELECT cash FROM users WHERE id ={}".format(ctx.author.id)).fetchone()[0]}**"""
Вот за такое надо бить по рукам стальной линейкой. Мало того что нечитаемо, так ещё и не проверишь, что база вернула.
Виктор Голованенко, sorted() требует, чтобы элементы были сравнимы, да и порядок элементов собьёт.
Фз, актуально ли это для автора, но упомянуть стоит.
Я давненько не работал с PHP, но... а разве ты не должен считать контент из псевдо-файла $sendToTelegram? Может, сервер видит, что ты просто закрыл соединение, и не отправляет сообщение.