1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00
This commit is contained in:
Steffo 2017-10-30 13:45:38 +01:00
parent c1436ffa05
commit a908990771
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: C27544372FBB445D
3 changed files with 103 additions and 28 deletions

12
bots.py Normal file
View file

@ -0,0 +1,12 @@
import multiprocessing
import telegrambot
import discordbot
discord_users_pipe = multiprocessing.Pipe()
discord = multiprocessing.Process(target=discordbot.process, args=(discord_users_pipe[0],))
telegram = multiprocessing.Process(target=telegrambot.process, args=(discord_users_pipe[1],))
if __name__ == "__main__":
discord.start()
telegram.start()

View file

@ -6,6 +6,7 @@ import errors
# Init the event loop # Init the event loop
import asyncio import asyncio
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
# Init the config reader # Init the config reader
@ -13,14 +14,14 @@ import configparser
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read("config.ini") config.read("config.ini")
# Open a new postgres session
session = db.Session()
# Init the discord bot # Init the discord bot
client = discord.Client() client = discord.Client()
@client.event @client.event
async def on_message(message: discord.Message): async def on_message(message: discord.Message):
# Open a new postgres session
session = db.Session()
try:
if message.content.startswith("!register"): if message.content.startswith("!register"):
try: try:
username = message.content.split(" ", 1)[1] username = message.content.split(" ", 1)[1]
@ -37,6 +38,20 @@ async def on_message(message: discord.Message):
session.add(d) session.add(d)
session.commit() session.commit()
await client.send_message(message.channel, "✅ Sincronizzazione completata!") await client.send_message(message.channel, "✅ Sincronizzazione completata!")
finally:
client.run(config["Discord"]["bot_token"])
session.close() session.close()
async def update_users_pipe(users_connection):
await client.wait_until_ready()
while True:
msg = await loop.run_in_executor(None, users_connection.recv)
if msg == "/cv":
discord_members = list(client.get_server(config["Discord"]["server_id"]).members)
users_connection.send(discord_members)
def process(users_connection):
print("Discordbot starting...")
loop.create_task(update_users_pipe(users_connection))
client.run(config["Discord"]["bot_token"])

View file

@ -2,12 +2,15 @@ import db
import errors import errors
from telegram import Bot, Update, Message from telegram import Bot, Update, Message
from telegram.ext import Updater, CommandHandler from telegram.ext import Updater, CommandHandler
from discord import Status as DiscordStatus
# Init the config reader # Init the config reader
import configparser import configparser
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read("config.ini") config.read("config.ini")
users_connection = None
def cmd_register(bot: Bot, update: Update): def cmd_register(bot: Bot, update: Update):
session = db.Session() session = db.Session()
try: try:
@ -27,10 +30,55 @@ def cmd_register(bot: Bot, update: Update):
bot.send_message(update.message.chat.id, "✅ Sincronizzazione completata!") bot.send_message(update.message.chat.id, "✅ Sincronizzazione completata!")
session.close() session.close()
def cmd_discord(bot: Bot, update: Update):
users_connection.send("/cv")
server_members = users_connection.recv()
message = ""
for member in server_members:
if member.status == DiscordStatus.offline and member.voice.voice_channel is None:
continue
if member.bot:
continue
# Online status emoji
if member.status == DiscordStatus.online:
message += "🔵 "
elif member.status == DiscordStatus.idle:
message += "⚫️ "
elif member.status == DiscordStatus.dnd:
message += "🔴 "
elif member.status == DiscordStatus.offline:
message += "⚪️ "
# Nickname
if member.nick is not None:
message += member.nick
else:
message += member.name
# Voice
if member.voice.voice_channel is not None:
# Voice status
if member.voice.self_deaf:
message += f" | 🔇 {member.voice.voice_channel.name}"
elif member.voice.self_mute:
message += f" | 🔈 {member.voice.voice_channel.name}"
else:
message += f" | 🔊 {member.voice.voice_channel.name}"
# Game or stream
if member.game is not None:
if member.game.type == 0:
message += f" | 🎮 {member.game.name}"
elif member.game.type == 1:
message += f" | 📡 [{member.game.name}]({member.game.url})"
message += "\n"
bot.send_message(update.message.chat.id, message, disable_web_page_preview=True, parse_mode="Markdown")
def process(discord_users_connection):
print("Telegrambot starting...")
global users_connection
users_connection = discord_users_connection
u = Updater(config["Telegram"]["bot_token"]) u = Updater(config["Telegram"]["bot_token"])
u.dispatcher.add_handler(CommandHandler("register", cmd_register)) u.dispatcher.add_handler(CommandHandler("register", cmd_register))
u.dispatcher.add_handler(CommandHandler("discord", cmd_discord))
u.start_polling() u.start_polling()
try:
u.idle() u.idle()
except KeyboardInterrupt:
pass