Followers

merge-requests/30/head
Bob Mottram 2021-08-02 15:19:09 +01:00
parent 7d9c280e05
commit d4a9de4690
2 changed files with 43 additions and 65 deletions

102
inbox.py
View File

@ -89,6 +89,7 @@ from categories import guessHashtagCategory
from context import hasValidContext from context import hasValidContext
from speaker import updateSpeaker from speaker import updateSpeaker
from announce import isSelfAnnounce from announce import isSelfAnnounce
from announce import createAnnounce
from notifyOnPost import notifyWhenPersonPosts from notifyOnPost import notifyWhenPersonPosts
@ -1899,79 +1900,56 @@ def _sendToGroupMembers(session, baseDir: str, handle: str, port: int,
followersFile = baseDir + '/accounts/' + handle + '/followers.txt' followersFile = baseDir + '/accounts/' + handle + '/followers.txt'
if not os.path.isfile(followersFile): if not os.path.isfile(followersFile):
return return
if not postJsonObject.get('to'):
return
if not postJsonObject.get('object'): if not postJsonObject.get('object'):
return return
if not hasObjectDict(postJsonObject): if not hasObjectDict(postJsonObject):
return return
nickname = handle.split('@')[0] nickname = handle.split('@')[0].replace('!', '')
# groupname = _getGroupName(baseDir, handle) # groupname = _getGroupName(baseDir, handle)
domain = handle.split('@')[1] domain = handle.split('@')[1]
domainFull = getFullDomain(domain, port) domainFull = getFullDomain(domain, port)
# set sender groupActor = httpPrefix + '://' + domainFull + '/users/' + nickname
if groupActor not in postJsonObject['to']:
return
cc = '' cc = ''
sendingActor = postJsonObject['actor'] nickname = handle.split('@')[0].replace('!', '')
sendingActorNickname = getNicknameFromActor(sendingActor)
sendingActorDomain, sendingActorPort = \ if debug:
getDomainFromActor(sendingActor) print('Group announce: ' + postJsonObject['object']['id'])
sendingActorDomainFull = \ announceJson = \
getFullDomain(sendingActorDomain, sendingActorPort) createAnnounce(session, baseDir, federationList,
senderStr = '@' + sendingActorNickname + '@' + sendingActorDomainFull nickname, domain, port,
contentStr = getBaseContentFromPost(postJsonObject, systemLanguage) groupActor + '/followers', cc,
if not contentStr.startswith(senderStr): httpPrefix,
pprint(postJsonObject) postJsonObject['object']['id'],
postJsonObject['object']['content'] = \ False, False,
senderStr + ' ' + contentStr sendThreads, postLog,
postJsonObject['object']['contentMap'][systemLanguage] = \ personCache, cachedWebfingers,
senderStr + ' ' + contentStr debug, __version__)
# add mention to tag list
if not postJsonObject['object']['tag']:
postJsonObject['object']['tag'] = []
# check if the mention already exists
mentionExists = False
for mention in postJsonObject['object']['tag']:
if mention['type'] == 'Mention':
if mention.get('href'):
if mention['href'] == sendingActor:
mentionExists = True
if not mentionExists:
# add the mention of the original sender
postJsonObject['object']['tag'].append({
'href': sendingActor,
'name': senderStr,
'type': 'Mention'
})
postJsonObject['actor'] = \
httpPrefix + '://' + domainFull + '/users/' + nickname
postJsonObject['to'] = \
[postJsonObject['actor'] + '/followers']
postJsonObject['cc'] = [cc]
postJsonObject['object']['to'] = postJsonObject['to']
postJsonObject['object']['cc'] = [cc]
# set subject
if not postJsonObject['object'].get('summary'):
postJsonObject['object']['summary'] = 'General Discussion'
domain = removeDomainPort(domain)
with open(followersFile, 'r') as groupMembers: with open(followersFile, 'r') as groupMembers:
for memberHandle in groupMembers: for memberHandle in groupMembers:
if memberHandle != handle: if memberHandle == handle:
memberNickname = memberHandle.split('@')[0] continue
groupAccount = False memberNickname = memberHandle.split('@')[0]
if memberNickname.startswith('!'): if memberNickname.startswith('!'):
memberNickname = memberNickname[1:] # don't have groups which are members of groups
groupAccount = True continue
memberDomain = memberHandle.split('@')[1] memberDomain = memberHandle.split('@')[1]
memberPort = port memberPort = port
if ':' in memberDomain: if ':' in memberDomain:
memberPort = getPortFromDomain(memberDomain) memberPort = getPortFromDomain(memberDomain)
memberDomain = removeDomainPort(memberDomain) memberDomain = removeDomainPort(memberDomain)
sendSignedJson(postJsonObject, session, baseDir, groupAccount = False
nickname, domain, port, sendSignedJson(announceJson, session, baseDir,
memberNickname, memberDomain, memberPort, cc, nickname, domain, port,
httpPrefix, False, False, federationList, memberNickname, memberDomain, memberPort, cc,
sendThreads, postLog, cachedWebfingers, httpPrefix, False, False, federationList,
personCache, debug, __version__, None, sendThreads, postLog, cachedWebfingers,
groupAccount) personCache, debug, __version__, None,
groupAccount)
def _inboxUpdateCalendar(baseDir: str, handle: str, def _inboxUpdateCalendar(baseDir: str, handle: str,

View File

@ -1655,7 +1655,7 @@ def testGroupFollow():
print('\n\n*********************************************************') print('\n\n*********************************************************')
print('Check that post was relayed from test group to bob') print('Check that post was relayed from test group to bob')
# bobMessageArrived = False bobMessageArrived = False
for i in range(20): for i in range(20):
time.sleep(1) time.sleep(1)
if os.path.isdir(inboxPathBob): if os.path.isdir(inboxPathBob):
@ -1663,11 +1663,11 @@ def testGroupFollow():
len([name for name in os.listdir(inboxPathBob) len([name for name in os.listdir(inboxPathBob)
if os.path.isfile(os.path.join(inboxPathBob, name))]) if os.path.isfile(os.path.join(inboxPathBob, name))])
if currPostsBob > startPostsBob: if currPostsBob > startPostsBob:
# bobMessageArrived = True bobMessageArrived = True
print('Bob received relayed group post!') print('Bob received relayed group post!')
break break
# assert bobMessageArrived is True assert bobMessageArrived is True
# stop the servers # stop the servers
thrAlice.kill() thrAlice.kill()