savebot.py
· 2.7 KiB · Python
Raw
#!/usr/bin/env python3
import discord
import peewee
from peewee import *
client = discord.Client()
db = SqliteDatabase("logs.db")
# install MySQLdb or pymysqlthen uncomment
# db = MySQLDatabase("logs", host="localhost", port=3306, user="root", passwd="")
class BaseModel(Model):
class Meta:
database = db
class Author(BaseModel):
discriminator = CharField()
id = CharField(primary_key=True)
username = CharField()
class Server(BaseModel):
name = CharField()
id = CharField(primary_key=True)
class Channel(BaseModel):
name = CharField()
server = ForeignKeyField(Server, related_name="channels")
id = CharField(primary_key=True)
class Message(BaseModel):
author = ForeignKeyField(Author, related_name="messages")
server = ForeignKeyField(Server, related_name="messages")
channel = ForeignKeyField(Channel, related_name="messages")
content = CharField()
id = CharField(primary_key=True)
timestamp = DateField()
db.connect()
try:
db.create_tables([Author, Server, Channel, Message])
except OperationalError:
pass
@client.event
async def on_message(message):
if message.author != client.user:
return
if message.content.startswith("save"):
await client.delete_message(message)
x = 0
async for logline in client.logs_from(message.channel, limit=30000):
try:
author = Author.get(id=logline.author.id)
except Author.DoesNotExist:
author = Author.create(id=logline.author.id, username=logline.author.name, discriminator=logline.author.discriminator)
try:
server = Server.get(id=logline.server.id)
except Server.DoesNotExist:
server = Server.create(id=logline.server.id, name=logline.server.name)
try:
channel = Channel.get(id=logline.channel.id)
except Channel.DoesNotExist:
channel = Channel.create(id=logline.channel.id, name=logline.channel.name, server=server)
msg = Message.create(author=author, channel=channel, server=server, content=logline.content, id=logline.id, timestamp=logline.timestamp)
x += 1
print(x, end="\r")
print("Saved {} messages from {}".format(x, message.channel.name))
@client.event
async def on_ready():
print("Logged in as {} ({})".format(client.user.name, client.user.id))
if client.user.bot:
print(discord.utils.oauth_url(client.user.id, permissions=discord.Permissions(74752)))
try:
with open(".bottoken") as f:
creds = f.read()
if "." in creds:
client.run(creds.strip(), bot=False)
else:
client.run(creds.strip())
finally:
db.close()
client.close()
| 1 | #!/usr/bin/env python3 |
| 2 | import discord |
| 3 | import peewee |
| 4 | from peewee import * |
| 5 | |
| 6 | client = discord.Client() |
| 7 | db = SqliteDatabase("logs.db") |
| 8 | # install MySQLdb or pymysqlthen uncomment |
| 9 | # db = MySQLDatabase("logs", host="localhost", port=3306, user="root", passwd="") |
| 10 | |
| 11 | class BaseModel(Model): |
| 12 | class Meta: |
| 13 | database = db |
| 14 | |
| 15 | class Author(BaseModel): |
| 16 | discriminator = CharField() |
| 17 | id = CharField(primary_key=True) |
| 18 | username = CharField() |
| 19 | |
| 20 | class Server(BaseModel): |
| 21 | name = CharField() |
| 22 | id = CharField(primary_key=True) |
| 23 | |
| 24 | class Channel(BaseModel): |
| 25 | name = CharField() |
| 26 | server = ForeignKeyField(Server, related_name="channels") |
| 27 | id = CharField(primary_key=True) |
| 28 | |
| 29 | class 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 | |
| 37 | db.connect() |
| 38 | try: |
| 39 | db.create_tables([Author, Server, Channel, Message]) |
| 40 | except OperationalError: |
| 41 | pass |
| 42 | |
| 43 | @client.event |
| 44 | async 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 |
| 69 | async 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 | |
| 74 | try: |
| 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()) |
| 81 | finally: |
| 82 | db.close() |
| 83 | client.close() |