#Discord Bot コア
import sys
import discord
from discord.ext import tasks

intents = discord.Intents.all()
#intents = discord.Intents.default()
#intents.members = True
#intents.messages = True
#intents.message_content = True
client = discord.Client(intents=intents)
guild = None

from config import core as core_config
from config import event as event_config

from fw import log
from fw import datetime
from app.event import on_loop

start_bot_time=0

channel_type = discord.ChannelType

async def run():
    global start_bot_time
    start_bot_time=datetime.now()
    print("version:" + str(get_version()))

    #bot起動する
    try:
        await client.start(core_config.client_token)
    except Exception as e:
        print(e)
        log.e(str(e))
        raise e

def get_guild():
    #サーバー情報を取得する
    guild=client.get_guild(core_config.guild_id)
    return guild

def get_version():
    return discord.__version__

def get_start_bot_time():
    return start_bot_time

async def close():
    log.p("exit...")
    await client.close()
    sys.exit()
    return

loop_sec = 0

#10秒に1回処理する
@tasks.loop(seconds=10)
async def loop():
    global loop_sec
    log.d("start sec:" + str(loop_sec))

    mode10 = True if loop_sec % 10 == 0 else False
    mode30 = True if loop_sec % 30 == 0 else False
    mode60 = True if loop_sec % 60 == 0 else False
    mode120 = True if loop_sec % 120 == 0 else False

    #120秒モードを実行する
    if mode120:
        await on_loop.on_120()
        
    #60秒モードを実行する
    if mode60:
        await on_loop.on_60()
        
    #30秒モードを実行する
    if mode30:
        await on_loop.on_30()
    
    #10秒モードを実行する
    if mode10:
        await on_loop.on_10()
        
    #カウントアップ
    loop_sec += 10
    #カウントリセット
    loop_sec %= 600

    log.d("end")
    return
#----------------

@loop.before_loop
async def on_before_loop():
    log.d("start")
    await client.wait_until_ready()
    log.d("end")
    return

@client.event
async def setup_hook():
    #ループ処理
    log.d("start")
    loop.start()
    log.d("end")
