코딩/디스코드

디스코드 봇 일정한 시간마다 메시지 보내기

샐프 2023. 10. 10. 19:12
반응형
반응형

디스코드 봇으로 일정한 시간마다, 간격마다 메시지를 보내도록 하고 싶을 때가 있다.

매일 아침 9시, 1초마다, 등등 여러 시간대로 설정할 수 있다.

discord.ext의 task를 사용한다.
그리고 시간을 알기위해 datetime을 사용한다.

from discord.ext import task
import datetime

먼저 datetime으로 현재 날짜와 시간을 가지고 오고 거기서 원하는 년도와 월 또는 일, 시간대를 뽑고 그 시간대와 내가 원하는 시간이 맞는지 확인하면 된다.

from datetime import datetime
# 현재 시간
dt = datetime.now()
# 결과
# 2023-01-18 10:50:39.569492 (datetime.datetime 타입)
코드 내용 결과
dt.year dt의 년을 추출 2023 (int)
dt.month dt의 월을 추출 1 (int)
dt.day dt의 일을 추출 18 (int), 24시간제
dt.hour dt의 시간을 추출 10 (int)
dt.minute dt의 분을 추출 50 (int)
dt.second dt의 초를 추출 39 (int)
# 현재 시간
dt = datetime.datetime.now()
year = dt.year

```python
# 1초마다 루프문을 실행
@tasks.loop(seconds=1)
async def every_write_forum():
    channel_name = discord.utils.get(bot.guilds[0].forums, name = '1234')
    dt = datetime.datetime.now()

    # 아침 9시 5분이면 실행
    if (dt.hour == 9) and (dt.minute == 5) and (dt.second > 0):
        await channel_name.create_thread(
            # 제목 (0000-00-00(요일))
            name=f'{dt.year}-{dt.month}-{dt.day}({weekend[dt.today().weekday()]})', 
            # 내용
            content='123123123')
        # 한 번실행하면 1시간 59분 쉼
        await asyncio.sleep(3540)
    # 1초 쉼
    await asyncio.sleep(1)
반응형