This repository was archived by the owner on Oct 4, 2019. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.py
More file actions
132 lines (97 loc) · 4.06 KB
/
logger.py
File metadata and controls
132 lines (97 loc) · 4.06 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import discord
import yaml
import logging
import logging.config
logging.basicConfig(level=logging.INFO)
logging.config.dictConfig({'version': 1, 'disable_existing_loggers': True})
LOGGER = logging.getLogger(__name__)
import logger_modules.db_ops
import logger_modules.embed
import logger_modules.init_funcs
from logger_modules.context_manager_session import session_scope
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
import db
import concurrent.futures
with open("config.yml") as configfile:
config = yaml.safe_load(configfile)
client = discord.Client()
@client.event
async def on_message(message):
if isinstance(message.channel, discord.DMChannel):
client.operations.store_private_message(message)
elif isinstance(message.channel, discord.TextChannel):
client.operations.store_guild_message(message)
@client.event
async def on_message_edit(before, after):
if not after.edited_at: # Apparently embed expansions trigger edits, but embed expansions dont set the edit date,
# ergo embed expansions arent edits
return
if isinstance(after.channel, discord.DMChannel):
client.operations.store_private_message_edit(before, after)
elif isinstance(after.channel, discord.TextChannel):
client.operations.store_guild_message_edit(before, after)
@client.event
async def on_message_delete(message):
if isinstance(message.channel, discord.DMChannel):
client.operations.delete_private_message(message)
elif isinstance(message.channel, discord.TextChannel):
client.operations.delete_guild_message(message)
@client.event
async def on_private_channel_pins_update(channel, _):
pins = await channel.pins()
current_pins = []
for message in pins:
client.operations.update_private_pin(message)
current_pins.append(message.id)
all_pins = client.operations.get_all_dm_pins(channel)
loopable_all_pins = [x[0] for x in all_pins]
for idx, pin in enumerate(loopable_all_pins):
if pin not in current_pins:
client.operations.remove_dm_pin(all_pins[idx][1])
@client.event
async def on_guild_channel_pins_update(channel, _):
pins = await channel.pins()
current_pins = []
for message in pins:
client.operations.update_guild_channel_pin(message)
current_pins.append(message.id)
all_pins = client.operations.get_all_guild_channel_pins(channel)
loopable_all_pins = [x[0] for x in all_pins]
for idx, pin in enumerate(loopable_all_pins):
if pin not in current_pins:
client.operations.remove_guild_channel_pin(all_pins[idx][1])
@client.event
async def on_user_update(before, after):
client.operations.update_user(before, after)
@client.event
async def on_member_update(before, after):
if before.nick != after.nick or before.roles != after.roles:
logging.warning("Member update: %s / %s", before, after)
client.operations.update_member(before, after)
@client.event
async def on_guild_update(before, after):
if before.name != after.name or before.owner.id != after.owner.id or before.icon_url != after.icon_url:
client.operations.update_guild(before, after)
@client.event
async def on_guild_role_update(before, after):
if before.name != after.name:
client.operations.update_guild(before, after)
@client.event
async def on_guild_channel_update(before, after):
if before.name != after.name or before.topic != after.topic:
client.operations.update_guild_channel(before, after)
@client.event
async def on_ready():
print("Ready to log messages!")
def main():
engine = create_engine(config["database_url"], pool_size=30)
db.Base.metadata.bind = engine
session_factory = sessionmaker(engine)
DBSession = scoped_session(session_factory)
client.operations = logger_modules.db_ops.DatabaseOperations(config, DBSession)
logger_modules.init_funcs.print_initial_info(DBSession)
logger_modules.init_funcs.make_static_dirs(config)
client.run(config["token"], bot=config["bot"])
if __name__ == "__main__":
main()