Terminèw le parsage des requêtes liées aux messages, (presque) terminé le serveuw
This commit is contained in:
+67
-10
@@ -1,12 +1,14 @@
|
|||||||
from typing import List
|
import random
|
||||||
from .requests import LoginRequest, PostLoginRequest
|
from typing import List, Dict, Tuple, Union
|
||||||
|
from .requests import LoginRequest, PostLoginRequest, PulseRequest, SendMsgRequest
|
||||||
|
from ..commons import BotMessage, Message, AbstractResponse
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
class Interlocutor:
|
class Interlocutor:
|
||||||
|
|
||||||
def __init__(self, nick: str, age:int, city: str, is_male: bool, conv_id: str):
|
def __init__(self, nick: str, age: int, city: str, is_male: bool, conv_id: str):
|
||||||
self.nick = nick
|
self.nick = nick
|
||||||
self.age = age
|
self.age = age
|
||||||
self.is_male = is_male
|
self.is_male = is_male
|
||||||
@@ -17,27 +19,58 @@ class Interlocutor:
|
|||||||
def from_string(cls, str):
|
def from_string(cls, str):
|
||||||
# 47130922100412004Rastapopoulos
|
# 47130922100412004Rastapopoulos
|
||||||
# 47 (age) 1 (sexe) 30922 (city id) 100412(conv id)
|
# 47 (age) 1 (sexe) 30922 (city id) 100412(conv id)
|
||||||
age = str[:2]
|
age = int(str[:2])
|
||||||
is_male = int(str[2:3]) in (1, 6)
|
is_male = int(str[2:3]) in (1, 6)
|
||||||
city_id = str[3:8]
|
city_id = str[3:8]
|
||||||
conv_id = str[8:14]
|
conv_id = str[8:14]
|
||||||
nick = str[17:]
|
nick = str[17:]
|
||||||
return cls(nick, age, city_id, is_male, conv_id)
|
return cls(nick, age, city_id, is_male, conv_id)
|
||||||
|
|
||||||
|
def to_botmessage(self):
|
||||||
|
sex_indic = "un homme" if self.is_male else "une femme"
|
||||||
|
return BotMessage("%s est %s de %i ans" %(self.nick, sex_indic, self.age))
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return other.nick == self.nick
|
return other.nick == self.nick
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return hash(self.nick)
|
||||||
|
|
||||||
|
|
||||||
class CocoClient:
|
class CocoClient:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.interlocutors = [] # type: List[Interlocutor]
|
self.interlocutors = [] # type: List[Interlocutor]
|
||||||
self.current_interlocutor = None # type: Interlocutor
|
self.current_interlocutor = None # type: Interlocutor
|
||||||
|
self.histories = {} # type:Dict[Interlocutor,List[Tuple]]
|
||||||
|
|
||||||
self.user_id = None # type:str
|
self.user_id = None # type:str
|
||||||
self.user_pass = None # type:str
|
self.user_pass = None # type:str
|
||||||
|
self.nick = None # type:str
|
||||||
|
|
||||||
|
def _format_history(self, interlocutor: Interlocutor):
|
||||||
|
if interlocutor in self.histories:
|
||||||
|
return [BotMessage("💬 %s: %s" % (nick, msg))
|
||||||
|
for nick, msg in self.histories[interlocutor][:5]]
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
|
||||||
|
def __process_and_format_received_msg(self, received_msgs):
|
||||||
|
out = []
|
||||||
|
for user_code, msg in received_msgs:
|
||||||
|
user = Interlocutor.from_string(user_code)
|
||||||
|
self.histories[user].append((user.nick, msg))
|
||||||
|
|
||||||
|
if user == self.current_interlocutor:
|
||||||
|
out.append(Message("💬 %s: %s" % (user.nick, msg)))
|
||||||
|
else:
|
||||||
|
out.append(BotMessage("💬 %s: %s" % (user.nick, msg)))
|
||||||
|
return out
|
||||||
|
|
||||||
def connect(self, nick: str, age: int, is_female: bool, zip_code: str):
|
def connect(self, nick: str, age: int, is_female: bool, zip_code: str):
|
||||||
|
self.nick = nick
|
||||||
|
self.histories = {}
|
||||||
|
self.current_interlocutor = None
|
||||||
login_req = LoginRequest(nick, age, is_female, zip_code)
|
login_req = LoginRequest(nick, age, is_female, zip_code)
|
||||||
self.user_id, self.user_pass = login_req.retrieve()
|
self.user_id, self.user_pass = login_req.retrieve()
|
||||||
logging.info("Logged in to coco as %s" % self.nick)
|
logging.info("Logged in to coco as %s" % self.nick)
|
||||||
@@ -45,11 +78,35 @@ class CocoClient:
|
|||||||
post_login_req.retrieve()
|
post_login_req.retrieve()
|
||||||
logging.info("Post login successful")
|
logging.info("Post login successful")
|
||||||
|
|
||||||
def pulse(self):
|
def pulse(self) -> List[AbstractResponse]:
|
||||||
pass
|
pulse_req = PulseRequest(self.user_id, self.user_pass)
|
||||||
|
received_msg = pulse_req.retrieve()
|
||||||
|
return self.__process_and_format_received_msg(received_msg)
|
||||||
|
|
||||||
def send_msg(self):
|
def send_msg(self, msg: str) -> List[AbstractResponse]:
|
||||||
pass
|
sendmsg_req = SendMsgRequest(self.user_id, self.user_pass, self.current_interlocutor.id, msg)
|
||||||
|
output = sendmsg_req.retrieve()
|
||||||
|
self.histories[self.current_interlocutor].append((self.nick, msg))
|
||||||
|
out_msg = Message("💬 %s: %s" % (self.nick, msg))
|
||||||
|
|
||||||
def switch_conv(self, nick: str=None):
|
if output:
|
||||||
pass
|
return [out_msg] + self.__process_and_format_received_msg(output)
|
||||||
|
else:
|
||||||
|
return [out_msg]
|
||||||
|
|
||||||
|
def switch_conv(self, nick: str=None) -> Union[List[BotMessage], BotMessage]:
|
||||||
|
new_interlocutor = None
|
||||||
|
if nick is not None:
|
||||||
|
for usr in self.interlocutors:
|
||||||
|
if usr.nick.upper() == nick.upper():
|
||||||
|
new_interlocutor = usr
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
new_interlocutor = random.choice(self.interlocutors)
|
||||||
|
|
||||||
|
if new_interlocutor is None:
|
||||||
|
return BotMessage("Impossible de trouver l'utilisateur")
|
||||||
|
else:
|
||||||
|
self.current_interlocutor = new_interlocutor
|
||||||
|
return [new_interlocutor.to_botmessage()] + \
|
||||||
|
self._format_history(self.current_interlocutor)
|
||||||
+30
-16
@@ -1,8 +1,11 @@
|
|||||||
from urllib.request import Request, urlopen
|
from urllib.request import Request, urlopen
|
||||||
from random import randint, choice, random
|
from random import randint, choice, random
|
||||||
from string import ascii_uppercase
|
from string import ascii_uppercase
|
||||||
|
from typing import Tuple, List
|
||||||
|
import re
|
||||||
|
|
||||||
|
from .tools import get_city_id, coco_cipher, encode_msg, decode_msg
|
||||||
|
|
||||||
from .tools import get_city_id, coco_cipher, encode_msg
|
|
||||||
|
|
||||||
class BaseCocoRequest:
|
class BaseCocoRequest:
|
||||||
host = 'http://cloud.coco.fr/'
|
host = 'http://cloud.coco.fr/'
|
||||||
@@ -61,28 +64,37 @@ class PostLoginRequest(LoggedInRequest):
|
|||||||
|
|
||||||
def _parse_response(self, response):
|
def _parse_response(self, response):
|
||||||
"""Checks if the post-login was successful"""
|
"""Checks if the post-login was successful"""
|
||||||
# TODO
|
return response[:5] == "99556"
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class PulseRequest(LoggedInRequest):
|
class PulseRequest(LoggedInRequest):
|
||||||
# typical response :
|
user_match = re.compile(r"[0-9]{17}[A-Za-z0-9]+")
|
||||||
# process1('#669276787#30130916276787003HotelDiscret#salut_toi#47130922100412004Rastapopoulos#Mes_hommages,_Mademoiselle...#47130922100412004Rastapopoulos#Jamais_un_mari_ne_sera_si_bien_veng*r_que_par_l*8amant_de_sa_femme.#40636427396758003leo913#cam.!7w2738702leo913#396758#');
|
|
||||||
# process1('#669276787#30130916276787003HotelDiscret#chaude=#292223#32130926292223003HDirect#Salut,_te_faire_payer_pour_un_plan_sexe_ca_te_plairais_=#');
|
|
||||||
# process1('#66945630927183748003WolfiSoDentelle#en_manque_de_sommeil_peut_etre_=_#');
|
|
||||||
# ^ le type a 45 balais donc il doit falloir couper après 669
|
|
||||||
# process1('#66929630926396791003Clouds#bonsoir,_comment_vas-tu_=_que_cherches_tu_=#');
|
|
||||||
# idem avec lui, il a 29 ans
|
|
||||||
def _get_url(self):
|
def _get_url(self):
|
||||||
return self.host + "95" + self.token + "?" + str(random())
|
return self.host + "95" + self.token + "?" + str(random())
|
||||||
|
|
||||||
def _parse_response(self, response):
|
def _parse_response(self, response):
|
||||||
"""Can either be a single message or several messages"""
|
"""Can either be a single message or several messages"""
|
||||||
# TODO
|
if response == "Z":
|
||||||
pass
|
return []
|
||||||
|
|
||||||
|
response = response[3:] # cutting the 669
|
||||||
|
split = response.split("#")
|
||||||
|
it = iter(split)
|
||||||
|
output_msgs = [] # type: List[Tuple[str,str]]
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
current = next(it)
|
||||||
|
if re.match(self.user_match, current):
|
||||||
|
msg = next(it)
|
||||||
|
decoded_msg = decode_msg(msg)
|
||||||
|
output_msgs.append((current, decoded_msg))
|
||||||
|
except StopIteration:
|
||||||
|
break
|
||||||
|
return output_msgs
|
||||||
|
|
||||||
|
|
||||||
class SendMsgRequest(LoggedInRequest):
|
class SendMsgRequest(PulseRequest):
|
||||||
|
|
||||||
def __init__(self, user_id, password, conv_id: str, msg: str):
|
def __init__(self, user_id, password, conv_id: str, msg: str):
|
||||||
super().__init__(user_id, password)
|
super().__init__(user_id, password)
|
||||||
@@ -90,10 +102,12 @@ class SendMsgRequest(LoggedInRequest):
|
|||||||
self.msg = msg
|
self.msg = msg
|
||||||
|
|
||||||
def _get_url(self):
|
def _get_url(self):
|
||||||
return self.host + "99" + self.token + self.conv_id + encode_msg(self.msg)
|
return self.host + "99" + self.token + self.conv_id + str(randint(0, 6)) + encode_msg(self.msg)
|
||||||
|
|
||||||
def _parse_response(self, response):
|
def _parse_response(self, response):
|
||||||
"""Response to a send message request can either just be #97x or an
|
"""Response to a send message request can either just be #97x or an
|
||||||
actual message (like in pulse request)"""
|
actual message (like in pulse request)"""
|
||||||
# TODO
|
if response[:2] == "97":
|
||||||
pass
|
return []
|
||||||
|
else:
|
||||||
|
return super()._parse_response(response)
|
||||||
Reference in New Issue
Block a user