55
submitted 2 weeks ago* (last edited 2 weeks ago) by LemmySlopSkimmer@hexbear.net to c/slop@hexbear.net

So, it seems like PieFed is becoming a real alternative to lemmy.

What are the differences between these two? From a tech perspective, and also morality/ethics, if you want. Any differences in vision for these services?

Say whatever is on your mind. I want to know.

On which one should we put our weight?

PieFed all the way. It’s developing at lightning speed, while Lemmy lags behind as the transphobic genocide denying devs beg for donations with in built donation begging banners on all Lemmy instances front pages. Instances are apparently scared to defed from .ml for fear the devs wont support them with help.

Rimu has made some interesting choices, such as blocking 196 from default federating posts until a user subs first or a dislike for meme subs. But when spoken to has been receptive and removed such things or made them optional for admins.

Ethically and feature wise PieFed is in the lead, its not perfect but its open to change and receptive to ideas

you are viewing a single comment's thread
view the rest of the comments
[-] RedWizard@hexbear.net 53 points 2 weeks ago* (last edited 2 weeks ago)

@edie@lemmy.encryptionin.space was looking at PieFed code the other week, and I ended up taking a look at it too. Its great fun to sneak a peak at.

For example, you can not cast a vote on PieFed if you've made 0 replies, 0 posts, AND your username is 8 characters long:

    def cannot_vote(self):
        if self.is_local():
            return False
        return self.post_count == 0 and self.post_reply_count == 0 and len(
            self.user_name) == 8  # most vote manipulation bots have 8 character user names and never post any content

If a reply is created, from anywhere, that only contains the word "this", the comment is dropped (CW: ableism in the function name):

def reply_is_stupid(body) -> bool:
    lower_body = body.lower().strip()
    if lower_body == 'this' or lower_body == 'this.' or lower_body == 'this!':
        return True
    return False

Every user (remote or local) has an "attitude" which is calculated as follows: (upvotes cast - downvotes cast) / (upvotes + downvotes). If your "attitude" is < 0.0 you can't downvote.

Every account has a Social Credit Score, aka your Reputation. If your account has less than 100 reputation and is newly created, you are not considered "trustworthy" and there are limitations placed on what your account can do. Your reputation is calculated as upvotes earned - downvotes earned aka Reddit Karma. If your reputation is at -10 you also cannot downvote, and you can't create new DMs. It also flags your account automatically if your reputation is to low:

PieFed boasts that it has "4chan image detection". Let's see how that works in practice:

            if site.enable_chan_image_filter:
                # Do not allow fascist meme content
                try:
                    if '.avif' in uploaded_file.filename:
                        import pillow_avif  # NOQA
                    image_text = pytesseract.image_to_string(Image.open(BytesIO(uploaded_file.read())).convert('L'))
                except FileNotFoundError:
                    image_text = ''
                except UnidentifiedImageError:
                    image_text = ''

                if 'Anonymous' in image_text and (
                        'No.' in image_text or ' N0' in image_text):  # chan posts usually contain the text 'Anonymous' and ' No.12345'
                    self.image_file.errors.append(
                        "This image is an invalid file type.")  # deliberately misleading error message
                    current_user.reputation -= 1
                    db.session.commit()
                    return False

Yup. If your image contains the word Anonymous, and contains the text No. or N0 it will reject the image with a fake error message. Not only does it give you a fake error, but it also will dock your Social Credit Score. Take note of the current_user.reputation -= 1

PieFed also boasts that it has AI generated text detection. Let's see how that also works in practice:

# LLM Detection
        if reply.body and '—' in reply.body and user.created_very_recently():
            # usage of em-dash is highly suspect.
            from app.utils import notify_admin
            # notify admin

This is the default detection, apparently you can use an API endpoint for that detection as well apparently, but it's not documented anywhere but within the code.

Do you want to leave a comment that is just a funny gif? No you don't. Not on PieFed, that will get your comment dropped and lower your Social Credit Score!

        if reply_is_just_link_to_gif_reaction(reply.body) and site.enable_gif_reply_rep_decrease:
            user.reputation -= 1
            raise PostReplyValidationError(_('Gif comment ignored'))

How does it know its just a gif though?

def reply_is_just_link_to_gif_reaction(body) -> bool:
    tmp_body = body.strip()
    if tmp_body.startswith('https://media.tenor.com/') or \
            tmp_body.startswith('https://media1.tenor.com/') or \
            tmp_body.startswith('https://media2.tenor.com/') or \
            tmp_body.startswith('https://media3.tenor.com/') or \
            tmp_body.startswith('https://i.giphy.com/') or \
            tmp_body.startswith('https://i.imgflip.com/') or \
            tmp_body.startswith('https://media1.giphy.com/') or \
            tmp_body.startswith('https://media2.giphy.com/') or \
            tmp_body.startswith('https://media3.giphy.com/') or \
            tmp_body.startswith('https://media4.giphy.com/'):
        return True
    else:
        return False

I'm not even sure someone would actually drop a link like this directly into a comment. It's not even taking into consideration whether those URLs are part of a markdown image tag.

As Edie mentioned, if someone has a user blocked, and that user replies to someone, their comment is dropped:

if parent_comment.author.has_blocked_user(user.id) or parent_comment.author.has_blocked_instance(user.instance_id):
    log_incoming_ap(id, APLOG_CREATE, APLOG_FAILURE, saved_json, 'Parent comment author blocked replier')
    return None

For Example:

(see Edies original comment here)

More from Edie:

Also add if the poster has blocked you! It is exactly as nonsense as you think.

Example:

I made a post in testing@piefed.social from my account testingpiefed@piefed.social, replied to it from my other testingpiefed@piefed.zip account. Since the .social account has blocked the .zip, it doesn't show up on .social, nor on e.g. piefed.europe.pub.

I then made a comment from my lemmy.ml account, and replied to it from my piefed.zip account, and neither .social, nor europe.pub can see my .zip reply, but can see my lemmy.ml comment!

But wait! There's More!

  • PieFed defederates from Hexbear.net, Lemmygrad.ml, and Lemmy.ml out of the box.
  • The "rational discourse" sidebar that you see on the main instance is hard coded into the system.
  • Moderators of a community can kick you from a community, which unsubscribes you from it, and does not notify you.
  • I was going to say that Admins had the ability to add a weight to votes coming from other instances, but the videos that showed this are now gone, and as of v1.5.0 they have removed the instance vote weight feature, claiming it was "unused".

All this to say. Piefed is a silly place, and no one should bother using its software.

[-] edie@lemmy.encryptionin.space 23 points 2 weeks ago

If your account has less than 100 reputation, you are not considered “trustworthy”

I actually misread on that, it also has to be a newly created account.


This user is suspected of being a cat. Please report any suspicious behavior.

[-] RedWizard@hexbear.net 17 points 2 weeks ago

I've made the correction. I missed that too somehow.

[-] edie@lemmy.encryptionin.space 18 points 2 weeks ago* (last edited 2 weeks ago)

Also add if the poster has blocked you! It is exactly as nonsense as you think.

Example:

I made a post in testing@piefed.social from my account testingpiefed@piefed.social, replied to it from my other testingpiefed@piefed.zip account. Since the .social account has blocked the .zip, it doesn't show up on .social, nor on e.g. piefed.europe.pub.

I then made a comment from my lemmy.ml account, and replied to it from my piefed.zip account, and neither .social, nor europe.pub can see that .zip reply, but can see my lemmy.ml comment!

Edit: here is the post on dbzer0, also can't see any .zip comments


This user is suspected of being a cat. Please report any suspicious behavior.

[-] RedWizard@hexbear.net 14 points 2 weeks ago* (last edited 2 weeks ago)

🥴

Ok, so if you block a person, it enforces that block for other users and even logged off users. Meaning, if me and you had a beef. I could block you, and then talk shit about you openly, and if you wanted to reply to me, you could, but it would then drop the comment and no one on my instance would see it, and no one on other instances would see it, unless you were on say, a Lemmy instance?

edit: sorry I had to rewrite that like twice because it's so fucking confusing.

[-] edie@lemmy.encryptionin.space 11 points 2 weeks ago* (last edited 2 weeks ago)

So, what I'm talking about here is this code:

if post.author.has_blocked_user(user.id) or post.author.has_blocked_instance(user.instance_id):
    log_incoming_ap(id, APLOG_CREATE, APLOG_FAILURE, saved_json, 'Post author blocked replier')
    return None

Where if the author of the post you are making a comment on has blocked you, the comment is dropped.

no one on your instance would see it

No. People on your own instance will always be able to see your comments, even if people on the piefed instance can't.

And the reason why piefed.europe.pub cannot see the comment from my piefed.zip account is that the testing community is on piefed.social, and it doesn't announce the comment to other instances. I think the reason why lemmy.ml can still see the comment is because piefed.zip sent it directly to lemmy.ml? But I don't really know.

Edit: I see you edited it. My reply is still more or less correct even with the edit. I will add, that being lemmy instance isn't going to fix it, it's still the piefed instance's (the instance the community is on) job to federate the comment. And if you were talking on a community not on your instance, so my reply wouldn't be dropped by the community's instance, every other instance except yours would know of my comments.


This user is suspected of being a cat. Please report any suspicious behavior.

[-] RedWizard@hexbear.net 9 points 2 weeks ago

I think I figured it out. Look at process_new_content. If the content is blocked, it sends a deleted to remote instances, I think when the content isn't allowed. Check this commit: https://codeberg.org/rimu/pyfedi/commit/ed7169b40c2b9ac0ae546d9badea45bbe57bcec5

[-] edie@lemmy.encryptionin.space 9 points 2 weeks ago* (last edited 2 weeks ago)

I see, that commit was made just a week ago, after I looked at the code.

Edit: Also it's only on main, and doesn't seem to have been added to a release yet

Edit: Ah, no, the 2170 / 2176 line was there before

Edit: NO, it was added a week ago: https://codeberg.org/rimu/pyfedi/commit/6b692c3beec7b427494708b3ad55c30875e94f7d


This user is suspected of being a cat. Please report any suspicious behavior.

[-] RedWizard@hexbear.net 9 points 2 weeks ago

I feel like this has been a thing for a while though. But this function

proactively_delete_reply

def proactively_delete_reply(community: Community, ap_id: str):
	    deletor = None
	    # Try to find a local moderator to send the Delete
	    for moderator in community.moderators():
	        moderator_account = db.session.query(User).get(moderator.user_id)
	        if moderator_account.is_local():
	            deletor = moderator_account
	            break
	    # Use admin account if there is not one.
	    if deletor is None:
	        deletor = db.session.query(User).get(1)
	    if deletor:
	
	        delete_id = f"https://{current_app.config['SERVER_NAME']}/activities/delete/{gibberish(15)}"
	        to = ["https://www.w3.org/ns/activitystreams#Public"]
	        cc = [community.public_url()]
	        delete = {
	          'id': delete_id,
	          'type': 'Delete',
	          'actor': deletor.public_url(),
	          'object': ap_id,
	          'audience': community.public_url(),
	          'to': to,
	          'cc': cc,
	          'summary': 'Automatic deletion due to block'
	        }
	
	        announce_id = f"https://{current_app.config['SERVER_NAME']}/activities/announce/{gibberish(15)}"
	        actor = community.public_url()
	        cc = [community.ap_followers_url]
	        to = ["https://www.w3.org/ns/activitystreams#Public"]
	        announce = {
	            'id': announce_id,
	            'type': 'Announce',
	            'actor': actor,
	            'object': delete,
	            '@context': default_context(),
	            'to': to,
	            'cc': cc
	        }
	        domain = furl(ap_id).host
	        instance = find_instance_by_domain(domain)
	        if instance and instance.inbox:
	            send_post_request(instance.inbox, announce, community.private_key, community.public_url() + '#main-key')

Is a strange way to handle blocks, right? It's fetching either a local moderator account, or a local admin account, and then using that account to send a block command on behalf of that user account? I still don't really know why the system doesn't simply store the blocks locally and then check at page render if the content is blocked, and then not render it for the user who created the block. Am I understanding this correctly, that this system enforces individual user blocks on the entire community? Even remote communities?

[-] edie@lemmy.encryptionin.space 7 points 2 weeks ago* (last edited 2 weeks ago)

You seem to be confused. Let's start with this "delete replies on remote instances when author has been blocked by parent content author", it was added a week ago, on the 13th of january, proactively_delete_reply was added then with it. What it does is not block, but delete, you may be familiar with a different name for it: remove.

Dealing with a new comment happens here, it starts with create_post_reply, it will for example return None if the parent comment author has blocked the replier, so the code never reaches PostReply.new(), it is inside this PostReply.new that the comment is added to the database, so the reply is never added to the database. Furthermore, since create_post_reply returns None, reply is None, and so if reply: is false, this means announce_activity_to_followers is never called, and as such other instances are never informed of the new comment (AFAIK it is the duty of the instance on which the community is on to announce to instances with subscribers to that community of new content)


This user is suspected of being a cat. Please report any suspicious behavior.

[-] RedWizard@hexbear.net 8 points 2 weeks ago

Ah yeah I see where I got mixed up. Sorry! Was the end of my day and doing to many things at once.

But do I have it correct that it seems as though individual users have some amount of control over how content federates on their instance through the blocking mechanism?

It's clamped to just the user's content, their comments and posts, but it still prevents federated content from being stored on the server or content being federated to other servers.

It's not a purely cosmetic block right? Because it changes what other users see relative to my own content. Unless I'm still confused about how this works.

If I make a post and I have a large block list of users from other instances, those users could be replying to my posts on their instance. But on my home instance, it wouldn't store those in the database because I've blocked them, which would result in users from my home instance never seeing them either, right?

load more comments (1 replies)
load more comments (3 replies)
[-] into_highest_invite@lemmygrad.ml 8 points 2 weeks ago

if i'm on piefed god forbid, and i reply to a comment on an OP who has blocked me, will my own instance reject my comment? will it give me an error or will it silently drop it or what?

[-] edie@lemmy.encryptionin.space 8 points 2 weeks ago* (last edited 2 weeks ago)

If you on lemmygrad.ml reply to a comment on a post where the OP has blocked you (no matter if you reply directly to the post or to another comment), you will think that the reply has gone through, it will show on lemmygrad.ml.

If the community the post is in, is on the same instance as the OP who has blocked you, the OP's instance and other instances e.g. lemmy.ml will not see the comment. If the community is not on the same instance as the OP, other instances will see it, only the OP's instance won't.

(This is at least how I understand it, if I'm wrong I really hope someone will correct me)


This user is suspected of being a cat. Please report any suspicious behavior.

load more comments (1 replies)
[-] edie@lemmy.encryptionin.space 8 points 2 weeks ago

I completely misread your comment.

If you are on the same instance as the blocker, you will get this error message: "Your reply was not accepted because The author of the parent post has blocked the author or instance of the new reply."


This user is suspected of being a cat. Please report any suspicious behavior.

load more comments (3 replies)
[-] ProletarianDictator@hexbear.net 20 points 2 weeks ago

wow this is bad. I need to look through the piefed repo. This shit is pure comedic gold even if super toxic in practice. Is this software entirely vibe coded by neolib ideologues?

[-] optissima@lemmy.ml 17 points 2 weeks ago

Is this software entirely vibe coded by neolib ideologues?

I feel like it has to be. Lack of good coding practices, like hardcoding all those is_it_a_gif strings, screams vibe coded to me. You couldn't get away with this stuff in a 200 level coding class. You know what, vibe coding is a good programming equivalent to libs: all substance with no foundations.

[-] RedWizard@hexbear.net 13 points 2 weeks ago

Yes it is, far as I'm aware.

[-] goferking0@lemmy.sdf.org 20 points 2 weeks ago* (last edited 2 weeks ago)

Linking to top of a comment thread that yes started with a terrible username. But it boiled down to people bringing up some of these concerns to people trying to say ml is super censorship

Then a piefed cheerleader(spokesperson?) who tries to make everyone's concerns just a sign they're misunderstanding what piefed does.

~~https://lemmy.ml/comment/2338226~~

https://lemmy.ml/comment/23382263

Correct link, I accidentally removed the 3

[-] dil@hexbear.net 17 points 2 weeks ago
[-] goferking0@lemmy.sdf.org 8 points 2 weeks ago

Ikr! I'm just amazed I replied longer to the same user.

load more comments (2 replies)
[-] RedWizard@hexbear.net 8 points 2 weeks ago

I think this is the wrong thread?

[-] goferking0@lemmy.sdf.org 11 points 2 weeks ago

Yeah I accidentally removed a number at the end, edited post.

https://lemmy.ml/post/41773598/23384239

And where other user started to explain why it's okay if it doesn't even let the person know it doesn't leave a comment. Because it shows in piefed...

At this point wonder if the attitude they have even works properly if voting outside of piefed

[-] edie@lemmy.encryptionin.space 9 points 2 weeks ago* (last edited 2 weeks ago)

Because it shows in piefed…

(Only locally, federated piefed instances can reply to blockers just fine)


This user is suspected of being a cat. Please report any suspicious behavior.

[-] goferking0@lemmy.sdf.org 10 points 2 weeks ago

https://lemmy.ml/comment/23390349

As I said initially, if every instance was Piefed - you wouldn’t be able to reply in the first place to someone who has blocked you. Whilst that interpretation of blocking could be disagreeable, it’s not what I consider ‘shadowbanning’ as you’re being directly blocked from interacting.

[-] edie@lemmy.encryptionin.space 10 points 2 weeks ago* (last edited 2 weeks ago)

Which AFAICT is incorrect as it is right now. Unless I somehow managed to create a bug where I can reply from one piefed account to another which has the first blocked.


This user is suspected of being a cat. Please report any suspicious behavior.

[-] RedWizard@hexbear.net 9 points 2 weeks ago* (last edited 2 weeks ago)

You haven't created a bug, and you have it correct. If a Piefed user blocks a remote Piefed user, and that remote Piefed user attempts to reply to them in the UI this is what happens:

  • UI shows reply button regardless of block status (no template check)
  • Local routes check in_reply_to.author.has_blocked_user(current_user.id); fails if block known locally.
  • User blocks are not federated by PieFed, so local instance often unaware
  • If block unknown locally, reply is created and federated
  • Remote instance (where block exists) rejects reply via create_post_reply check, may send Delete activity back
  • Creates "ghost reply" scenario: appears locally but not on remote instance

Piefed has no means of federating blocks. In fact, they have some TODOs to actually implement federated blocks:

  • No sending code: app/user/routes.py:811 has a TODO comment # federate block with placeholder ellipsis, and app/post/routes.py:1384 has a similar TODO.
  • Only moderation bans are federated: app/shared/tasks/blocks.py:ban_person sends Block activities exclusively for site/community bans, not user‑to‑user blocks.
  • Incoming blocks are handled: app/activitypub/routes.py:1520‑1526 processes incoming Mastodon‑style blocks (without a target field) and creates local UserBlock records, but there is no corresponding outgoing federation.

So as it stands now, Lemmy and PieFed experience the exact same thing. I guess Piefed users just don't notice.

load more comments (3 replies)
[-] optissima@lemmy.ml 19 points 2 weeks ago

Am I reading this correctly, that if you have no defederated instances it falls back to defederating hexbear/ml/grad?

defed_list = BannedInstances.query.filter(or_(BannedInstances.domain == 'hexbear.net',
                                                  BannedInstances.domain == 'lemmygrad.ml',
                                                  BannedInstances.domain == 'hilariouschaos.com',
                                                  BannedInstances.domain == 'lemmy.ml')).order_by(BannedInstances.domain).all()
[-] JustSo@hexbear.net 20 points 2 weeks ago

Pretty amusing that there's apparently no thought to abstraction, just a bunch of brain genius "feature" additions strung together.

[-] RedWizard@hexbear.net 19 points 2 weeks ago

Absolutely zero abstraction to be found.

[-] FunkyStuff@hexbear.net 16 points 2 weeks ago

well that'd create hierarchies

[-] goferking0@lemmy.sdf.org 17 points 2 weeks ago* (last edited 1 week ago)

Someone in a different release thread was going on about how piefed just made up its own federation return ignoring standards

Found it

https://lemmy.world/comment/21179968

Edit, for those getting wrong thread comment in question

It's this kind of thinig that makes me think of PieFed as just a pile of hacks with no serious consideration for the Fediverse

Designating which comment is an answer involves federating a new Activity:

{  
         "id": "https://piefed.social/activities/answer/hgb4iO4b8UAFRTn", 
         "type": "ChooseAnswer",  
         "actor": "https://piefed.socialz/u/rimu", 
         "object": "https://piefed.ngrok.app/comment/224",  
         "@context": ["https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1"],  
         "audience": "https://crust.piefed.social/c/linux_questions",  
         "to": ["https://www.w3.org/ns/activitystreams#Public"],  
         "cc": ["https://crust.piefed.social/c/linux_questions"]  
}  

There are at least three different ways to implement this in a way compatible with ActivityPub:

  1. Send an "as:accept" activity with the comment as the object.
  1. Add an attribute for the comment indicating that it has been selected.
  1. Create a collection for chosen answers, add to the post object.

And even if this type of new activity was a necessity, they could add their own extensions via a proper JSON-LD context definition. But they completely disregard JSON-LD, which means that they expect other servers to either (1) adopt their ad-hoc vocabulary or (2) ignore it completely and keep this idea that "Only PieFed has these features".

[-] JustSo@hexbear.net 15 points 2 weeks ago* (last edited 2 weeks ago)

lmao of course they aren't even implementing the underlying protocol properly.

edit: lmao that whole thread is good entertainment.

load more comments (1 replies)
load more comments (4 replies)
load more comments (4 replies)
[-] Sanctus@anarchist.nexus 15 points 2 weeks ago* (last edited 2 weeks ago)

My instance is a piefed software I believe. Dammit. This shit is just unforgivable and theres no reason for it besides being a fashy. Absolutely wild. I just liked the instance ideology :.(

[-] RedWizard@hexbear.net 13 points 2 weeks ago

Its got some silly shit but honestly the most annoying thing is the way they handle blocks. Most of this stuff can be turned off. The fact that we're communicating means your instance has transcended the softwares fashy nature.

[-] Sanctus@anarchist.nexus 13 points 2 weeks ago

It still feels nasty using it now. I read this entire thread. Thanks for the very fucking confusing but interesting deep dive into the fashy software design theory. Shit is absolutely wild. I have no idea why anyone would want to even waste time implementing nonsense like this.

[-] RedWizard@hexbear.net 14 points 2 weeks ago

They just want reddit! They can't accept that their concepts of freedom and democracy create the exact same controls they claim to hate.

I just find it funny that the things I've complained about in the past are being removed. Vote weights are gone, community kicking is gone. I think you can still put warnings on external communities (maybe instances) which is silly.

I'm tempted to make a hard fork of it and remove all the reddit shit and fix the blocking feature as a laugh. I wouldn't have much interest in maintaining it though.

[-] Sanctus@anarchist.nexus 9 points 1 week ago* (last edited 1 week ago)

I think what I find the most hilarious after this is all of you hexbears have great social credit according to anarchist.nexus lol meanwhile it flags Donald J Musk and UniversalMonk lol

[-] edie@lemmy.encryptionin.space 7 points 1 week ago

I remember seeing you talk in some other community and I didn't point it out but I want to make sure you know, attitude and reputation are not the same thing.

Anyways, yeah, since we don't have downvotes our attitude is always 1.0 (since it's just the ratio of upvotes to downvotes) and our reputation should be pretty high since it's only federated users that can downvote us.


This user is suspected of being a cat. Please report any suspicious behavior.

[-] Sanctus@anarchist.nexus 7 points 1 week ago

Yeah I comment too much. That makes sense with downvotes disabled, but it also highlights how silly it all is. If they could even see you, their systems wouldn't work anyway lol

load more comments (1 replies)
[-] ExotiqueMatter@lemmygrad.ml 9 points 2 weeks ago* (last edited 2 weeks ago)

I’m tempted to make a hard fork of it and remove all the reddit shit and fix the blocking feature as a laugh. I wouldn’t have much interest in maintaining it though.

With how spaghetti the code must be given all the hard-coded ad-hoc on top of each other they have going on, you might be better off just rewriting it from scratch instead.

load more comments (2 replies)
[-] db0@lemmy.dbzer0.com 8 points 2 weeks ago

If you don't like the software specifically, you can switch to lemmy.dbzer0.com instead. Those two instances (anarchist.nexus and lemmy.dbzer0.com) are for all intents and purposes the same instance.

load more comments (5 replies)
[-] chgxvjh@hexbear.net 15 points 2 weeks ago

More opensource devs should subtly abuse their users like that.

[-] DornerStan@lemmygrad.ml 15 points 2 weeks ago

Lmao holy shit

[-] RedWizard@hexbear.net 11 points 2 weeks ago

psSome of my favorite stuff is just the comments about lemmy in the code.

# old Lemmy instances ( < 0.19.8 ) allow nsfw content in nsfw communities to be flagged as sfw which makes no sense

# remove unnecessary "cross-posted from..." message that Lemmy inserts (only on link posts where we have a UI showing cross-posts)

# Lemmy adds the community slug as a hashtag on every post in the community, which we want to ignore

(Congrats hardware@lemmy.world, you've been hardcoded)

# replace lemmy's spoiler markdown left in HTML
clean_html = clean_html.replace('<h2>
</h2>', '<p>:::</p>') # this is needed for lemmy.world/c/hardware's sidebar, for some reason. (I like that some how there is a Piefed flavor of markdown and a Lemmy flavor of mark down?) # this function lets local users use the more intuitive soft-breaks for newlines, but actually stores the Markdown in Lemmy-compatible format # Reasons for this: # 1. it's what any adapted Lemmy apps using an API would expect # 2. we've reverted to sending out Markdown in 'source' because: # a. Lemmy doesn't convert '<details><summary>' back into its '::: spoiler' format # b. anything coming from another PieFed instance would get reduced with html_to_text() # c. raw 'https' strings in code blocks are being converted into <a> links for HTML that Lemmy then converts back into []() def piefed_markdown_to_lemmy_markdown(piefed_markdown: str): # only difference is newlines for soft breaks. re_breaks = re.compile(r'(\S)(\r\n)') lemmy_markdown = re_breaks.sub(r'\1 \2', piefed_markdown) return lemmy_markdown (Aw that's nice. I wonder how much they'll have to update when 1.0 comes out...) # change back when lemmy supports flairs # flair = find_flair_or_create(json_tag, post.community_id) # if flair: # post.flair.append(flair) (Lemmy uses confusion. Piefed is confused!) # Lemmy sends 'like' for upvote and 'dislike' for down votes. Cool! When it undoes an upvote it sends an 'Undo Like'. Fine. When it undoes a downvote it sends an 'Undo Like' - not 'Undo Dislike'?!

:::

[-] edie@lemmy.encryptionin.space 8 points 2 weeks ago

This seems to be many different things, could you break it up to make it clearer what fits together?


This user is suspected of being a cat. Please report any suspicious behavior.

[-] edie@lemmy.encryptionin.space 10 points 2 weeks ago

Moderators of a community can kick you from a community, which unsubscribes you from it, and does not notify you.

Actually admins.

Also apparently it doesn't work?


This user is suspected of being a cat. Please report any suspicious behavior.

load more comments (1 replies)
[-] aanes_appreciator@hexbear.net 7 points 1 week ago

mmmm delicious software slop. thank you

load more comments (1 replies)
this post was submitted on 22 Jan 2026
55 points (96.6% liked)

Slop.

778 readers
718 users here now

For posting all the anonymous reactionary bullshit that you can't post anywhere else.

Rule 1: All posts must include links to the subject matter, and no identifying information should be redacted.

Rule 2: If your source is a reactionary website, please use archive.is instead of linking directly.

Rule 3: No sectarianism.

Rule 4: TERF/SWERFs Not Welcome

Rule 5: No bigotry of any kind, including ironic bigotry.

Rule 6: Do not post fellow hexbears.

Rule 7: Do not individually target federated instances' admins or moderators.

founded 1 year ago
MODERATORS