Last active 1511060079

Discord script to save a channel log

Revision 1c0f5741c4ab83682f666e325edbad6b829136ca

savebot.py Raw
1#!/usr/bin/env python3
2import discord
3import peewee
4from peewee import *
5
6client = discord.Client()
7db = SqliteDatabase("logs.db")
8# install MySQLdb or pymysqlthen uncomment
9# db = MySQLDatabase("logs", host="localhost", port=3306, user="root", passwd="")
10
11class BaseModel(Model):
12 class Meta:
13 database = db
14
15class Author(BaseModel):
16 discriminator = CharField()
17 id = CharField(primary_key=True)
18 username = CharField()
19
20class Server(BaseModel):
21 name = CharField()
22 id = CharField(primary_key=True)
23
24class Channel(BaseModel):
25 name = CharField()
26 server = ForeignKeyField(Server, related_name="channels")
27 id = CharField(primary_key=True)
28
29class Message(BaseModel):
30 author = ForeignKeyField(Author, related_name="messages")
31 server = ForeignKeyField(Server, related_name="messages")
32 channel = ForeignKeyField(Channel, related_name="messages")
33 content = CharField()
34 id = CharField(primary_key=True)
35 timestamp = DateField()
36
37db.connect()
38try:
39 db.create_tables([Author, Server, Channel, Message])
40except OperationalError:
41 pass
42
43@client.event
44async def on_message(message):
45 if message.author != client.user:
46 return
47 if message.content.startswith("save"):
48 await client.delete_message(message)
49 x = 0
50 async for logline in client.logs_from(message.channel, limit=30000):
51 try:
52 author = Author.get(id=logline.author.id)
53 except Author.DoesNotExist:
54 author = Author.create(id=logline.author.id, username=logline.author.name, discriminator=logline.author.discriminator)
55 try:
56 server = Server.get(id=logline.server.id)
57 except Server.DoesNotExist:
58 server = Server.create(id=logline.server.id, name=logline.server.name)
59 try:
60 channel = Channel.get(id=logline.channel.id)
61 except Channel.DoesNotExist:
62 channel = Channel.create(id=logline.channel.id, name=logline.channel.name, server=server)
63 msg = Message.create(author=author, channel=channel, server=server, content=logline.content, id=logline.id, timestamp=logline.timestamp)
64 x += 1
65 print(x, end="\r")
66 print("Saved {} messages from {}".format(x, message.channel.name))
67
68@client.event
69async def on_ready():
70 print("Logged in as {} ({})".format(client.user.name, client.user.id))
71 if client.user.bot:
72 print(discord.utils.oauth_url(client.user.id, permissions=discord.Permissions(74752)))
73
74try:
75 with open(".bottoken") as f:
76 creds = f.read()
77 if "." in creds:
78 client.run(creds.strip(), bot=False)
79 else:
80 client.run(creds.strip())
81finally:
82 db.close()
83 client.close()