1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

Added Discord account system

This commit is contained in:
Steffo 2017-03-22 19:13:22 +01:00
parent a240ec7955
commit b353883b07
2 changed files with 61 additions and 12 deletions

21
extra_discord.py Normal file
View file

@ -0,0 +1,21 @@
import discord
import asyncio
loop = asyncio.get_event_loop()
class ExtraClient:
def __init__(self, token):
self.client = discord.Client()
self.commands = dict()
self.token = token
@self.client.event
async def on_message(message):
split = message.content.split(" ")
command = split[0].lstrip("!")
if command in self.commands:
await self.commands[command](self.client, message, split[1:])
async def run(self):
await self.client.login(self.token)
await self.client.connect()

View file

@ -4,7 +4,7 @@ import json
import random import random
import aiohttp import aiohttp
import async_timeout import async_timeout
import discord import extra_discord
import markovify import markovify
import database import database
import royalbotconfig import royalbotconfig
@ -12,7 +12,7 @@ import telegram
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
b = telegram.Bot(royalbotconfig.telegram_token) b = telegram.Bot(royalbotconfig.telegram_token)
d = discord.Client() d = extra_discord.ExtraClient(royalbotconfig.discord_token)
def currently_logged_in(update): def currently_logged_in(update):
@ -25,9 +25,11 @@ def currently_logged_in(update):
async def start(bot, update, arguments): async def start(bot, update, arguments):
user = currently_logged_in(update) user = currently_logged_in(update)
if user is None: if user is None:
await update.message.reply(bot, f"Ciao!\n_Non hai eseguito l'accesso al RYGdb.", parse_mode="Markdown") await update.message.reply(bot, f"Ciao!\n_Non hai eseguito l'accesso al RYGdb._", parse_mode="Markdown")
else: else:
await update.message.reply(bot, f"Ciao!\nHai eseguito l'accesso come `{user}`.", parse_mode="Markdown") telegram_status = "🔵" if user.telegram_id is not None else ""
discord_status = "🔵" if user.discord_id is not None else ""
await update.message.reply(bot, f"Ciao!\nHai eseguito l'accesso come `{user}`.\n\n*Account collegati:*\n{telegram_status} Telegram\n{discord_status} Discord", parse_mode="Markdown")
async def diario(bot, update, arguments): async def diario(bot, update, arguments):
@ -166,7 +168,7 @@ Sintassi: `/discord <messaggio>`"""
await update.message.reply(bot, "Richiesta inviata.", parse_mode="Markdown") await update.message.reply(bot, "Richiesta inviata.", parse_mode="Markdown")
async def sync(bot, update, arguments): async def sync_telegram(bot, update, arguments):
"""Connetti il tuo account Telegram al Database Royal Games. """Connetti il tuo account Telegram al Database Royal Games.
Sintassi: `/sync <username> <password>`""" Sintassi: `/sync <username> <password>`"""
@ -179,10 +181,9 @@ Sintassi: `/sync <username> <password>`"""
if logged_user is not None: if logged_user is not None:
# Add the telegram_id to the user if it's missing # Add the telegram_id to the user if it's missing
if logged_user.telegram_id is None: if logged_user.telegram_id is None:
# Handle duplicate
logged_user.telegram_id = update.message.sent_from.user_id logged_user.telegram_id = update.message.sent_from.user_id
session.commit() session.commit()
print(f"{logged_user} ha sincronizzato l'account.") print(f"{logged_user} ha sincronizzato l'account di Telegram.")
await update.message.reply(bot, f"Sincronizzazione riuscita!\nSei loggato come `{logged_user}`.", parse_mode="Markdown") await update.message.reply(bot, f"Sincronizzazione riuscita!\nSei loggato come `{logged_user}`.", parse_mode="Markdown")
else: else:
await update.message.reply(bot, "⚠ L'account è già stato sincronizzato.", parse_mode="Markdown") await update.message.reply(bot, "⚠ L'account è già stato sincronizzato.", parse_mode="Markdown")
@ -190,6 +191,29 @@ Sintassi: `/sync <username> <password>`"""
await update.message.reply(bot, "⚠ Username o password non validi.", parse_mode="Markdown") await update.message.reply(bot, "⚠ Username o password non validi.", parse_mode="Markdown")
async def sync_discord(bot, message, arguments):
"""Connetti il tuo account Discord al Database Royal Games.
Sintassi: `!sync <username> <password>`"""
if len(arguments) != 2:
await bot.send_message(message.channel, "⚠ Sintassi del comando non valida.\n`!sync <username> <password>`")
return
# Try to login
session, logged_user = database.login(arguments[0], arguments[1])
# Check if the login is successful
if logged_user is not None:
# Add the discord_id to the user if it's missing
if logged_user.discord_id is None:
logged_user.discord_id = int(message.author.id)
session.commit()
print(f"{logged_user} ha sincronizzato l'account di Discord.")
await bot.send_message(message.channel, f"Sincronizzazione riuscita!\nSei loggato come `{logged_user}`.")
else:
await bot.send_message(message.channel, "⚠ L'account è già stato sincronizzato.")
else:
await bot.send_message(message.channel, "⚠ Username o password non validi.")
async def changepassword(bot, update, arguments): async def changepassword(bot, update, arguments):
"""Cambia la tua password del Database Royal Games. """Cambia la tua password del Database Royal Games.
@ -216,11 +240,11 @@ Sintassi: `/cv`"""
await update.message.reply(bot, "⚠ Sintassi del comando non valida.\n`/cv`", parse_mode="Markdown") await update.message.reply(bot, "⚠ Sintassi del comando non valida.\n`/cv`", parse_mode="Markdown")
return return
# Wait for the Discord bot to login # Wait for the Discord bot to login
while not d.is_logged_in: while not d.client.is_logged_in:
await asyncio.sleep(1) await asyncio.sleep(1)
# Find all the users in the server # Find all the users in the server
# Change this if the bot is logged in more than one server at once? # Change this if the bot is logged in more than one server at once?
users = list(d.get_all_members()) users = list(d.client.get_all_members())
# Find all the channels # Find all the channels
channels = dict() channels = dict()
for user in users: for user in users:
@ -287,23 +311,27 @@ Sintassi: `/cv`"""
to_send += "\n" to_send += "\n"
await update.message.reply(bot, to_send, parse_mode="Markdown", disable_web_page_preview=1) await update.message.reply(bot, to_send, parse_mode="Markdown", disable_web_page_preview=1)
if __name__ == "__main__": if __name__ == "__main__":
# Generate the db if it's empty
# Init Telegram bot commands # Init Telegram bot commands
b.commands["start"] = start b.commands["start"] = start
b.commands["leggi"] = leggi b.commands["leggi"] = leggi
b.commands["diario"] = diario b.commands["diario"] = diario
b.commands["discord"] = discord b.commands["discord"] = discord
b.commands["sync"] = sync b.commands["sync"] = sync_telegram
b.commands["changepassword"] = changepassword b.commands["changepassword"] = changepassword
b.commands["help"] = help_cmd b.commands["help"] = help_cmd
b.commands["markov"] = markov b.commands["markov"] = markov
b.commands["cv"] = cv b.commands["cv"] = cv
# Init Discord bot commands
d.commands["sync"] = sync_discord
# Init Telegram bot # Init Telegram bot
loop.create_task(b.run()) loop.create_task(b.run())
print("Telegram bot start scheduled!") print("Telegram bot start scheduled!")
# Init Discord bot # Init Discord bot
loop.run_until_complete(d.login(royalbotconfig.discord_token)) loop.create_task(d.run())
loop.create_task(d.connect())
print("Discord bot start scheduled!") print("Discord bot start scheduled!")
# Run everything! # Run everything!
loop.run_forever() loop.run_forever()