Answer the question
In order to leave comments, you need to log in
Can't get a variable out of a function in python, how to do it?
In the callback_inline function, a unit is added to the variable, but for some reason it is not displayed using return, therefore I cannot request it later.
import telebot
from telebot import types
bot = telebot.TeleBot('token')
miners1 = 1
miners2 = 0
miners3 = 0
miners4 = 0
miners5 = 0
miners6 = 0
diamond = int(miners1) * 100 + int(miners2) * 300 + int(miners3) * 300 + int(miners4) * 300 + int(miners5) * 300 + int(
miners6) * 300
balance = 10000
@bot.message_handler(commands=['start'],content_types=['Назад'])
# keyboard
def welcome(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("Магазин")
item2 = types.KeyboardButton("Шахта")
item3 = types.KeyboardButton("Баланс")
item4 = types.KeyboardButton("Обменник")
markup.add(item1, item2,item3,item4)
bot.send_message(message.chat.id,
"Добро пожаловать, {0.first_name}!\nЯ - <b>{1.first_name}</b>, бот созданный чтобы быть подопытным кроликом.".format(
message.from_user, bot.get_me()),
parse_mode='html', reply_markup=markup)
# Вопрос-Ответ
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == 'miner1':
bot.send_message(call.message.chat.id, 'Отлично, Вы купили шахтера 1 уровня')
miners1 += 1
elif call.data == 'miner2':
bot.send_message(call.message.chat.id, 'Отлично, Вы купили шахтера 2 уровня')
miners2 +=1
elif call.data == 'miner3':
bot.send_message(call.message.chat.id, 'Отлично, Вы купили шахтера 2 уровня')
miners3 +=1
elif call.data == 'miner4':
bot.send_message(call.message.chat.id, 'Отлично, Вы купили шахтера 2 уровня')
miners4 +=1
# remove inline buttons
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=" Как дела?",
reply_markup=None)
# show alert
bot.answer_callback_query(callback_query_id=call.id, show_alert=False,
text="ЭТО ТЕСТОВОЕ УВЕДОМЛЕНИЕ!!11")
except Exception as e:
print(repr(e))
return miners1
@bot.message_handler(content_types=['text'])
def lalala(message):
if message.chat.type == 'private':
if message.text == 'Привет':
bot.send_message(message.chat.id,
"Добро пожаловать, {0.first_name}!\nЯ - <b>{1.first_name}</b>, бот созданный чтобы ты мог заработать!".format(
message.from_user, bot.get_me()),
parse_mode='html')
elif message.text == 'Баланс':
bot.send_message(message.chat.id, 'У Вас: '+ str(balance) + ' алмазов')
elif message.text == 'Шахта':
bot.send_message(message.chat.id, 'У Вас работает: ' + str(miners1) + ' шахтер 1 уровня')
elif message.text == 'Магазин':
markup = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton("Шахтер 1 уровня", callback_data='miner1')
item2 = types.InlineKeyboardButton("Шахтер 2 уровня", callback_data='miner2')
item3 = types.InlineKeyboardButton("Шахтер 3 уровня", callback_data='miner3')
item4 = types.InlineKeyboardButton("Шахтер 4 уровня", callback_data='miner4')
markup.add(item1, item2,item3,item4)
bot.send_message(message.chat.id,
'Приветствую вас, {0.first_name}!\nЗдесь Вы можете приобрести шахтеров и разные улучшения для вашей шахты!\n'.format(
message.from_user, bot.get_me()), parse_mode='html', reply_markup=markup)
elif message.text == 'Обменник':
bot.send_message(message.chat.id, 'Тут Вы можете обменять свои ресурсы на деньги!')
else:
bot.send_message(message.chat.id, 'Неверная команда')
# Запуск
bot.polling(none_stop=True)
Answer the question
In order to leave comments, you need to log in
You need to declare variables that are mutable in a function as global.
def callback_inline(call):
global miners1, miners2, miners3, miners4
try:
if call.message:
...
return miners1
There is 1 extra step here. Do this:
except Exception as e:
print(repr(e))
return miners1
return miners1
except Exception as e:
print(repr(e))
return miners1
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question