-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
90 lines (74 loc) · 2.64 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import discord
from clock_options import Clocking
from response import Response
from user_interface import UserInterface
from time_options import TimeOptions
from apscheduler.schedulers.background import BackgroundScheduler
from env import TOKEN, TEXT_CHANNEL, TEST_TOKEN, TEST_TEXT_CHANNEL
from model import Users
debug = False
client = discord.Client()
users = Users()
users.load()
clock = Clocking("Asia/Singapore")
ui = UserInterface()
options = TimeOptions()
resp = Response()
sched = BackgroundScheduler()
sched.add_job(users.sync, 'interval', minutes=1)
sched.start()
if not debug:
text_channel_id = int(TEXT_CHANNEL)
token = TOKEN
else:
text_channel_id = int(TEST_TEXT_CHANNEL)
token = TEST_TOKEN
@client.event
async def on_ready():
print(f"We have logged in as {client.user}")
@client.event
async def on_voice_state_update(member, before, after, ui=ui, users=users):
msg, status = None, None
user_id = str(member)
server_id = str(member.guild.id)
text_channel = client.get_channel(text_channel_id)
if before.channel is None:
msg = "$clockin"
ui.update(msg=msg, status=status, server_id=server_id, user_id=user_id)
ui, users = clock.clock_in(ui, users)
if ui.status != 1:
ui.status = -1
embed = resp.generate_embed(ui)
if embed is not None:
await text_channel.send(embed=embed)
elif after.channel is None:
msg = "$clockout"
ui.update(msg=msg, status=status, server_id=server_id, user_id=user_id)
ui, users = clock.clock_out(ui, users)
if ui.status != 1:
ui.status = -1
embed = resp.generate_embed(ui)
if embed is not None:
await text_channel.send(embed=embed)
@client.event
async def on_message(message, users=users, clock=clock, ui=ui, options=options, resp=resp):
user_id = str(message.author)
server_id = str(message.guild.id)
msg = message.content
status, title, name_duration = None, None, None
ui.update(msg=msg, status=status, title=title, user_id=user_id,
server_id=server_id, name_duration=name_duration)
if message.author == client.user:
return None
if message.content.startswith("$clockin"):
ui, users = clock.clock_in(ui, users)
elif message.content.startswith("$clockout"):
ui, users = clock.clock_out(ui, users)
elif message.content.startswith("$time"):
ui, users = options.update(ui, users, clock)
elif message.content.startswith("$sync"):
users.sync()
embed = resp.generate_embed(ui)
if embed is not None:
await message.channel.send(embed=embed)
client.run(token)