Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions client_classes/DiscordClient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import discord
from client_classes.Message import Message


class DiscordClient(discord.Client):
def __init__(self, compute_message_func):
super(DiscordClient, self).__init__()
self.compute_massage = compute_message_func

async def on_message(self, message):
if message.author != self.user:
from_id = message.channel.id
text = message.content
author_id = message.author.id
author_name = message.author.name
if type(message.channel) != discord.channel.DMChannel:
chat_name = message.author.guild.name + "/" + message.channel.name
is_owner = message.author.guild_permissions.administrator
self.compute_massage(Message((from_id, "DS"), text, author_id, author_name, chat_name=chat_name, is_owner=is_owner))
else:
self.compute_massage(Message((from_id, "DS"), text, author_id, author_name))

def send_msg(self, id, text):
self.loop.create_task(self.get_channel(id).send(text))
28 changes: 28 additions & 0 deletions client_classes/Message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
class Message:
def __init__(self, from_id, text, author_id, author_name, chat_name=None, is_owner=None):
self.from_id = from_id
self.text = text
self.author_id = author_id
self.author_name = author_name
self.chat_name = chat_name
self.is_owner = is_owner

def is_chat_command(self):
return len(self.text) > 0 and self.text[0] == "!"

def get_chat_id(self):
return str(self.from_id[0]) + self.from_id[1]

def get_author_id(self):
return str(self.author_id) + self.from_id[1]

def get_chat_command(self):
if not self.is_chat_command():
return None
return self.text[1:].strip()

def get_text_to_forwarding(self):
description = ""
if self.author_name is not None:
description += self.author_name + ":\n"
return description + self.text
35 changes: 35 additions & 0 deletions client_classes/TelegramClient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import threading
import telebot
from client_classes.Message import Message


class TelegramClient:
def __init__(self, compute_message_func):
self.client = None
self.handler_thread = None
self.compute_massage = compute_message_func

def __handler(self):
@self.client.message_handler(content_types=["text"])
def on_message(message):
from_id = message.chat.id
text = message.text
author_id = message.from_user.id
author = self.client.get_chat_member(from_id, author_id)
author_name = message.from_user.last_name + " " + message.from_user.first_name
if from_id != author_id:
chat_name = message.chat.title
is_owner = author.status == "creator"
self.compute_massage(Message((from_id, "TG"), text, author_id, author_name, chat_name=chat_name, is_owner=is_owner))
else:
self.compute_massage(Message((from_id, "TG"), text, author_id, author_name))

self.client.infinity_polling()

def send_msg(self, id, text):
self.client.send_message(id, text)

def run(self, token):
self.client = telebot.TeleBot(token)
self.handler_thread = threading.Thread(target=self.__handler)
self.handler_thread.start()
55 changes: 55 additions & 0 deletions client_classes/VkClient.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import threading
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from client_classes.Message import Message


class VkClient:
def __init__(self, compute_message_func):
self.client = None
self.group_id = None
self.handler_thread = None
self.compute_massage = compute_message_func

def __get_peer_id_by_id(self, id):
return id + 2000000000

def __get_user(self, id):
return self.client.method("users.get", {"user_ids": id})[0]

def __get_chat(self, id):
chat = self.client.method("messages.getConversationsById", {"peer_ids": self.__get_peer_id_by_id(id)})
if chat["count"] == 0:
return {"chat_settings": {"title": "NULL"}}
return chat["items"][0]

def __handler(self):
longpoll = VkBotLongPoll(self.client, self.group_id)

for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW:
text = event.object["message"]["text"]
author = self.__get_user(event.object["message"]["from_id"])
author_id = event.object["message"]["from_id"]
author_name = author["last_name"] + " " + author["first_name"]
if event.from_chat:
from_id = event.chat_id
chat = self.__get_chat(event.chat_id)
chat_name = chat["chat_settings"]["title"]
is_owner = author_id == chat["chat_settings"]["owner_id"]
self.compute_massage(Message((from_id, "VK"), text, author_id, author_name, chat_name=chat_name, is_owner=is_owner))
else:
from_id = event.object["message"]["from_id"]
self.compute_massage(Message((from_id, "VK"), text, author_id, author_name))

def send_msg(self, id, text, to_chat):
if to_chat:
self.client.method("messages.send", {"chat_id": id, "message": text, "random_id": 0})
else:
self.client.method("messages.send", {"user_id": id, "message": text, "random_id": 0})

def run(self, token, group_id):
self.client = vk_api.VkApi(token=token)
self.group_id = group_id
self.handler_thread = threading.Thread(target=self.__handler)
self.handler_thread.start()
5 changes: 3 additions & 2 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@

TELEGRAM_TOKEN = ""

GRAPH_STORAGE_NAME = "graph.txt"
ERROR_LOG_NAME = "error_log.txt"
GRAPH_STORAGE_NAME = "data/graph.txt"
ERROR_LOG_NAME = "data/error_log.txt"
USERS_INFORMATION_DB_NAME = "data/users_inf.db"
File renamed without changes.
File renamed without changes.
Loading