#python #bots #telegram-bot #binance #py-telegram-bot-api
Вопрос:
Всем привет В этом модуле(telegram_interface.пи) У меня есть метод (send_msg), который мне нужно вызвать в других модулях, но всякий раз, когда я пытаюсь импортировать этот модуль(telegram_interface) внутри других модулей для вызова метода send_msg, у меня возникает ошибка, что я вызываю getUpdates из более чем одного экземпляра, есть ли способ избежать этого !
telegram_interface.py
import configparser
import telepot
import time
from database import Status
import datetime as dt
import place_orders as po
import requests
config = configparser.ConfigParser()
config.read("config1.ini")
bot_token = str(config["TelegramBot1"]["bot_token"])
my_chat_id = str(config["TelegramBot1"]["my_chat_id"])
bot111 = telepot.Bot(bot_token)
def time_now():
time = dt.datetime.now()
time = time.strftime("%H:%M:%S // %d-%m-%Y")
return time
# def send_msg(text):
# url = "https://api.telegram.org/bot" bot_token
# "/sendMessage?chat_id=" my_chat_id "amp;parse_mode=Markdownamp;text="
# http_request = url text
# response = requests.get(http_request)
# return response.json()
def handle(msg):
user_name = msg["from"]["first_name"] " " msg["from"]["last_name"]
content_type, chat_type, chat_id = telepot.glance(msg)
if content_type == "text":
command = msg["text"]
if "/START" == command.upper():
bot111.sendMessage(chat_id,
"Welcome " user_name " in your Auto Trading Bot! n command [/help] to get more information about the bot. ")
elif "/HELP" == command.upper():
bot111.sendMessage(chat_id,
"Available commands are: n **[ON, OFF] - Control the bot. n **[balance] - Get your free USDT balance.")
elif "ON" == command.upper():
Status.save_status(collection="Status",
status=command.upper(), time=time_now())
bot111.sendMessage(chat_id, "System is *Activated*.",
parse_mode="Markdown")
with open("log.txt", "a") as log_file:
log_file.write(
"System is Activated at : " time_now() "n")
elif "OFF" == command.upper():
Status.save_status(collection="Status",
status=command.upper(), time=time_now())
bot111.sendMessage(chat_id, "System is *Deactivated*.",
parse_mode="Markdown")
with open("log.txt", "a") as log_file:
log_file.write("System is Deactivated at : "
time_now() "n")
elif "BALANCE" == command.upper():
free_balance = po.get_usdt_balance()
bot111.sendMessage(chat_id,
"Your free balance is : *" str(free_balance) " USDT*", parse_mode="Markdown")
else:
bot111.sendMessage(chat_id,
"Unknown command, use [/help] to get more information.")
bot111.message_loop(handle)
while True:
time.sleep(20)
Ответ №1:
Когда вы импортируете какой-либо модуль в Python, он выполняется, например, давайте представим, что у нас есть следующий модуль print_hello.py
:
print('hello world')
Если вы запустите его, он будет напечатан hello world
. Если вы импортируете этот модуль:
import print_hello
это hello world
тоже будет напечатано! Таким образом, если вы импортируете его несколько раз, он будет печататься hello world
ровно столько раз.
Чтобы избежать этого, вам необходимо смоделировать главную точку входа, отредактировать print_hello.py
:
if __name__ == '__main__':
print('hello world')
В этом случае hello world
будет напечатан только при запуске print_hello.py
, но не будет напечатан при импорте.
Итак, вы должны применить это к своим строкам кода:
bot111.message_loop(handle)
while True:
time.sleep(20)
Комментарии:
1. это работает идеально ……. большое спасибо 🙂