Search code examples
pythondiscord

Circular import using flask and discord bot


I have these two files:

main.py

import os
import discord
from keep_alive import keep_alive
client = discord.Client()

my_secret = os.environ['Token']

async def SendMeMessage():
  user = await client.fetch_user('my id')
  await user.create_dm()
  await user.dm_channel.send("Someone needs help")
  
keep_alive()
client.run(my_secret)

keep_alive.py

from flask import Flask
from threading import Thread
#from main import SendMeMessage

app = Flask('')
@app.route('/')
def home():
  #SendMeMessage()
  return "Hello. I am alive!"

def run():
  app.run(host='0.0.0.0', port=8080)

def keep_alive():
  t = Thread(target=run)
  t.start()



And I would like to import SendMemessage. So when someone send get request on flask server, I wanna receive message from my discord bot. I'm stuck on error "circular import", when I implement commented code.


Solution

  • I would move the discord bot code out of main.py, so it no longer depends on an import of keep_alive.

    bot.py:

    import os
    import discord
    
    client = discord.Client()
    
    async def SendMeMessage():
      user = await client.fetch_user('my id')
      await user.create_dm()
      await user.dm_channel.send("Someone needs help")
    

    keep_alive.py:

    from flask import Flask
    from threading import Thread
    from bot import SendMeMessage
    
    app = Flask('')
    @app.route('/')
    def home():
      SendMeMessage()
      return "Hello. I am alive!"
    
    def run():
      app.run(host='0.0.0.0', port=8080)
    
    def keep_alive():
      t = Thread(target=run)
      t.start()
    

    main.py:

    import os
    
    from keep_alive import keep_alive
    from bot import client
    
    my_secret = os.environ['Token']
    
    keep_alive()
    client.run(my_secret)
    

    This way, bot.py has already been fully imported when keep_alive.py runs, so there is no longer a circular import.