디스코드 봇으로 일정한 시간마다, 간격마다 메시지를 보내도록 하고 싶을 때가 있다.
매일 아침 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)