Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
0180ddeece | |||
33c5d5fc91 | |||
d6e3721404 | |||
a059dcff30 |
11
README.md
11
README.md
|
@ -16,7 +16,7 @@ Installation
|
|||
|
||||
Clone the repo:
|
||||
|
||||
git clone https://git.bitmessage.org/prachiyadav/PyBitMessage_AutoResponder && cd PyBitMessage_AutoResponder
|
||||
git clone https://git.bitmessage.org/Bitmessage/PyBitMessage_AutoResponder && cd PyBitMessage_AutoResponder
|
||||
|
||||
And.. you're done.
|
||||
|
||||
|
@ -26,7 +26,7 @@ Before running this script please run the bitmessages application, because if yo
|
|||
|
||||
Configuration Steps
|
||||
|
||||
1.Put the credentials.ini file into the .config directory which contains the database of bitmessage application.
|
||||
1.Put the autoresponder.conf file into the .config directory which contains the database of bitmessage application.
|
||||
|
||||
2.To establish a connection, copy and paste these lines into the bitmessagesettings section of the keys.dat file.Note that the values "username" and "password" below are merely examples, and should be replaced by values that cannot feasibly be guessed:
|
||||
--> apienabled = true
|
||||
|
@ -36,9 +36,4 @@ Configuration Steps
|
|||
--> apipassword = abc@123
|
||||
|
||||
3.For running the application use
|
||||
--> Python autoresponder_mailing.py
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--> python3 autoresponder_mailing.py
|
||||
|
|
|
@ -1,61 +1,79 @@
|
|||
#!/usr/bin/python3
|
||||
"""Bitmessage AutoResponder"""
|
||||
import base64
|
||||
import configparser
|
||||
import json
|
||||
import os
|
||||
import time
|
||||
import xmlrpclib
|
||||
import xmlrpc.client
|
||||
|
||||
class BitmessageAutoresponder():
|
||||
|
||||
class BitmessageAutoresponder(): # pylint: disable=too-many-locals
|
||||
"""Sending and receiving messages through autoresponder"""
|
||||
config = configparser.ConfigParser()
|
||||
db_var = os.path.join(os.environ["HOME"], '.config/PyBitmessage/credentials.ini')
|
||||
db_var = os.path.join(os.environ["HOME"],
|
||||
'.config/PyBitmessage/autoresponder.conf')
|
||||
config.read(db_var)
|
||||
apiport = config['sqlite3']['apiport']
|
||||
apiinterface = config['sqlite3']['apiinterface']
|
||||
apiusername = config['sqlite3']['apiusername']
|
||||
apipassword = config['sqlite3']['apipassword']
|
||||
api = xmlrpclib.ServerProxy("http://%s:%s@%s:%s/"%(apiusername, apipassword, apiinterface, apiport))
|
||||
api = xmlrpc.client.ServerProxy(
|
||||
"http://%s:%s@%s:%s/"
|
||||
% (apiusername, apipassword, apiinterface, apiport))
|
||||
expire = 300
|
||||
myaddress_path = os.path.join(os.environ["HOME"],'.config/PyBitmessage/keys.dat')
|
||||
label = "Autoresponder"
|
||||
|
||||
def __init__(self):
|
||||
self.addresses = {}
|
||||
self.track = {}
|
||||
|
||||
def init_address(self):
|
||||
"""generate random address if there isn't one"""
|
||||
try:
|
||||
addresses = json.loads(self.api.listAddresses())['addresses']
|
||||
if addresses:
|
||||
return
|
||||
except KeyError:
|
||||
pass
|
||||
self.api.createRandomAddress(base64.b64encode(
|
||||
self.label.encode()).decode('ascii'))
|
||||
|
||||
def loop(self):
|
||||
"""Main loop"""
|
||||
for i in json.loads(self.api.listAddresses())['addresses']:
|
||||
self.addresses[i['address']] = True
|
||||
|
||||
def send_autorepond_inbox_message(self):
|
||||
"""Sending Auto Message To The Recipient"""
|
||||
track = {}
|
||||
open_file = open(self.myaddress_path)
|
||||
get_file = open_file.read()
|
||||
split_file = get_file.split("\n")
|
||||
for lines in split_file:
|
||||
if len(lines) == 39:
|
||||
if "[" in lines:
|
||||
set_address=lines.strip("[]")
|
||||
while True:
|
||||
inboxmessages = json.loads(self.api.getAllInboxMessages())
|
||||
inbox_var = inboxmessages.get('inboxMessages')
|
||||
currenttime = time.time()
|
||||
for values in inbox_var:
|
||||
msgid = values.get('msgid')
|
||||
toaddress = values.get('fromAddress')
|
||||
fromaddress = values.get('toAddress')
|
||||
subject = values.get('subject')
|
||||
message = values.get('message')
|
||||
try:
|
||||
if time.time() < track[toaddress]:
|
||||
continue
|
||||
except KeyError:
|
||||
pass
|
||||
if set_address == toaddress:
|
||||
continue
|
||||
self.api.sendMessage(toaddress, fromaddress, subject, message)
|
||||
self.api.trashMessage(msgid)
|
||||
track[toaddress] = currenttime + self.expire
|
||||
list_of_time_track = list(key for (key, value) in track.items() if value < currenttime)
|
||||
for address in list_of_time_track:
|
||||
track.pop(address)
|
||||
self.delete_outbox_message()
|
||||
self.process_inbox_messages()
|
||||
self.cleanup_tracking()
|
||||
self.delete_outbox_messages()
|
||||
time.sleep(10)
|
||||
|
||||
def delete_outbox_message(self):
|
||||
"""Deleting Messages from Outbox Having Status ackreceived or msgsentnoackexpected"""
|
||||
def process_inbox_messages(self):
|
||||
"""Loop inbox and process messages"""
|
||||
inboxmessages = json.loads(self.api.getAllInboxMessages())
|
||||
inbox_var = inboxmessages.get('inboxMessages')
|
||||
for values in inbox_var:
|
||||
msgid = values.get('msgid')
|
||||
toaddress = values.get('fromAddress')
|
||||
fromaddress = values.get('toAddress')
|
||||
subject = values.get('subject')
|
||||
message = values.get('message')
|
||||
try:
|
||||
if time.time() < self.track[toaddress]:
|
||||
continue
|
||||
except KeyError:
|
||||
pass
|
||||
if toaddress in self.addresses:
|
||||
continue
|
||||
self.api.sendMessage(toaddress, fromaddress, subject, message)
|
||||
self.api.trashMessage(msgid)
|
||||
self.track[toaddress] = time.time() + self.expire
|
||||
|
||||
def delete_outbox_messages(self):
|
||||
"""Deleting Messages from outbox having status
|
||||
ackreceived or msgsentnoackexpected"""
|
||||
sentmessage = json.loads(self.api.getAllSentMessages())
|
||||
sent_var = sentmessage.get('sentMessages')
|
||||
for values in sent_var:
|
||||
|
@ -64,5 +82,16 @@ class BitmessageAutoresponder():
|
|||
if status_ack_rcvd in ('ackreceived', 'msgsentnoackexpected'):
|
||||
self.api.trashSentMessageByAckData(ackdata)
|
||||
|
||||
def cleanup_tracking(self):
|
||||
"""Expire old tracking data"""
|
||||
currenttime = time.time()
|
||||
list_of_time_track = list(
|
||||
key for (key, value)
|
||||
in self.track.items() if value < currenttime)
|
||||
for address in list_of_time_track:
|
||||
self.track.pop(address)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
BitmessageAutoresponder().send_autorepond_inbox_message()
|
||||
BitmessageAutoresponder().init_address()
|
||||
BitmessageAutoresponder().loop()
|
||||
|
|
Loading…
Reference in New Issue
Block a user