бот, завершенный другим запросом getUpdates, убедитесь, что запущен только один экземпляр бота

#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. это работает идеально ……. большое спасибо 🙂