#python #python-3.x #bots
#python #python-3.x #боты
Вопрос:
Итак, я создал валюту для бота под названием «battlePoints» или сокращенно bp. Проблема в том, что я хочу создать магазин для покупки товаров (его не обязательно хранить) Я уже получил это, но не знаю, как преобразовать в команду типа buy name.
items = {
"Game1":[3,20],
"Game2":[5,30],
"game3":[5,20],
"game4":[8,10],
}
while True:
print("game1 = 3BP / game2 = 5BP / game3 = 5BP / game4 = 8BP")
print("Account Balance bp",stash)
choice = input("What would you like to buy?: ").strip().title()
if choice in items:
if items[choice][1]>0:
if stash>=items[choice][0]:
items[choice][1]=items[choice][1]-1
stash= stash-items[choice][0]
print("Thank you..!")
print("")
else:
print("Sorry you dont enough money...")
print("")
else:
print("sorry sold out")
print("")
else:
print("Sorry we dont have that item...")
print("")
Я пытался добавить в client.commmand()
асинхронный def buy(): и затем код, но i, похоже, не работает.
Не могли бы вы указать мне правильное направление, показать мне, где я могу найти ответ, или, пожалуйста, просто скажите мне, что я сделал не так
Комментарии:
1. У вас есть готовый и работающий бот или вы пытаетесь его создать, и это весь имеющийся у вас код?
2. у меня запущен бот, вот ссылка на полный код hastebin.com/qijajujogu.py
Ответ №1:
Я предполагаю, что проблема будет в том, choice = input("What would you like to buy?: ").strip().title()
что боты не получают входные данные через input()
функцию. Однако обычно вы можете передать контекст сообщения своим функциям. Я вижу в вашем полном коде, что у вас есть:
@commands.has_role('Moderator')
@client.command(pass_context = True)
async def clear(ctx, amount=100):
Где я отмечу pass_context = True
. Это позволяет вашей функции считывать контекст и содержимое сообщения discord. Например, вы можете вызвать ctx.message.author
, чтобы узнать автора сообщения, которое интерпретируется. Итак, если, скажем, «Боб Джо» вводит «!очистить 50», тогда:
ctx.message.author == "Bob Joe"
Это также должно измениться amount
со 100 -> 50. Используя аналогичные методы, у вас может быть пользователь «!buy GoldShoes», и это вызовет ваш async def buy(ctx, item):
случай, когда:
item == "GoldShoes"
Что делать с этим вводом, зависит от вашей логики, но, возможно, это поможет немного объяснить процесс. Дайте мне знать, если я что-то не понял.
Ответ №2:
Вы не должны использовать print()
и input()
, там есть разные функции и модули, вы должны установить и импортировать discord, также импортировать команды из discord.ext
. затем добавьте ctx
в качестве параметра в команду, которую вы используете await ctx.send(message)
. вы используете client.wait_for('message')
, это больше похоже input()
. Я предлагаю вам ознакомиться с документами для discord.py это полностью отличается от этого.