1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

Added basic sync command

This commit is contained in:
Steffo 2017-03-10 10:11:06 +01:00
parent e3739ed707
commit 45401da9c9
2 changed files with 57 additions and 20 deletions

View file

@ -109,17 +109,25 @@ Sintassi: `/discord <messaggio>`"""
await update.message.reply(bot, "Richiesta inviata.") await update.message.reply(bot, "Richiesta inviata.")
# TODO: delete me async def sync(bot, update, arguments):
async def login(bot, update, arguments): """Connetti il tuo account Telegram al Database Royal Games.
"""Fai il login usando i dati del database Royal Games.
Sintassi: `/login <username> <password>`""" Sintassi: `/sync <username> <password>`"""
if len(arguments) != 2: if len(arguments) != 2:
await update.message.chat.send_message(bot, "⚠ Sintassi del comando non valida.\n`/login <username> <password>`") await update.message.chat.send_message(bot, "⚠ Sintassi del comando non valida.\n`/sync <username> <password>`")
return return
logged_user = database.login(arguments[0], arguments[1]) # Try to login
session, logged_user = database.login(arguments[0], arguments[1])
# Check if the login is successful
if logged_user is not None: if logged_user is not None:
await update.message.chat.send_message(bot, f"Login riuscito: {logged_user}") # Add the telegram_id to the user if it's missing
if logged_user.telegram_id is None:
# Handle duplicate
logged_user.telegram_id = update.message.sent_from.user_id
session.commit()
await update.message.chat.send_message(bot, f"Sincronizzazione riuscita: {logged_user}")
else:
await update.message.chat.send_message(bot, "⚠ L'account è già stato sincronizzato.")
else: else:
await update.message.chat.send_message(bot, "⚠ Username o password non validi.") await update.message.chat.send_message(bot, "⚠ Username o password non validi.")
@ -128,6 +136,6 @@ if __name__ == "__main__":
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["login"] = login b.commands["sync"] = sync
b.commands["help"] = help b.commands["help"] = help
b.run() b.run()

View file

@ -4,49 +4,78 @@ from sqlalchemy.ext.declarative import declarative_base
import bcrypt import bcrypt
# Initialize the database # Initialize the database
engine = create_engine("sqlite:///tempdb.sqlite") engine = create_engine("sqlite:///db.sqlite")
Base = declarative_base() Base = declarative_base()
Session = sessionmaker(bind=engine) Session = sessionmaker(bind=engine)
class Member(Base): class User(Base):
__tablename__ = "members" __tablename__ = "members"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
username = Column(String, unique=True, nullable=False) username = Column(String, unique=True, nullable=False)
password = Column(String, nullable=False) password = Column(String, nullable=False)
royal = Column(Boolean, nullable=False) royal = Column(Boolean, nullable=False)
telegram_id = Column(Integer, unique=True)
def __str__(self): def __str__(self):
return f"{self.id} - {self.username}" return f"{self.id} - {self.username}"
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
def create_member(username, password, royal=False): def create_user(username, password, royal=False):
"""Create a new member and add it to the database.""" """Create a new user and add it to the database."""
# Create a new session # Create a new session
session = Session() session = Session()
# Hash the password with bcrypt # Hash the password with bcrypt
hashed_password = bcrypt.hashpw(password.encode("utf8"), bcrypt.gensalt()) hashed_password = bcrypt.hashpw(password.encode("utf8"), bcrypt.gensalt())
# Create a new member # Create a new user
new_member = Member(username=username, password=hashed_password, royal=royal) new_member = User(username=username, password=hashed_password, royal=royal)
# Add the newly created member to the session # Add the newly created member to the session
session.add(new_member) session.add(new_member)
# Commit the changes # Commit the changes
session.commit() session.commit()
def login(username, password): def login(username, password):
"""Try to login using the database password.""" """Try to login using the database password. The session is always returned, while the user object is returned if the login is successful."""
# Create a new session # Create a new session
session = Session() session = Session()
# Find the matching user # Find the matching user
users = session.query(Member).filter(Member.username == username).all() users = session.query(User).filter(User.username == username).all()
# No user with a matching username found # No user with a matching username found
if len(users) == 0: if len(users) == 0:
return None return session, None
else: else:
db_user = users[0] db_user = users[0]
# Test the password and return the user if successful # Test the password and return the session and the user if successful
if bcrypt.hashpw(password.encode("utf8"), db_user.password) == db_user.password: if bcrypt.hashpw(password.encode("utf8"), db_user.password) == db_user.password:
return db_user # TODO: Maybe there's a better way to do this?
return session, db_user
else: else:
return None return session, None
def init_royal_db():
create_user("steffo", "uno", True)
create_user("adry", "due", True)
create_user("cate", "tre", True)
create_user("protoh", "quattro", True)
create_user("infopz", "cinque", True)
create_user("kappa", "sei", True)
create_user("manu", "sette", True)
create_user("frank", "otto", True)
create_user("paltri", "nove", True)
create_user("mestakes", "dieci", True)
create_user("tauei", "undici", True)
create_user("sensei", "dodici", True)
create_user("gattopardo", "tredici", True)
create_user("dima", "quattordici", True)
create_user("spaggia", "quindici", True)
create_user("igor", "sedici", True)
create_user("nemesis", "diciassette", True)
create_user("comiso", "diciotto", True)
create_user("fulz", "diciannove", True)
create_user("dailir", "venti", True)
create_user("fedececco", "ventuno", True)
create_user("albertwerk", "ventidue", True)
create_user("voltaggio", "ventitre", True)
create_user("doc", "ventiquattro", True)