Browse Source

add extremely overdetailed gender script

master
Alison Watson 1 year ago
parent
commit
67d17c4a3f
2 changed files with 138 additions and 0 deletions
  1. +7
    -0
      fish/gender-swap
  2. +131
    -0
      text/gender-swap

+ 7
- 0
fish/gender-swap View File

@@ -0,0 +1,7 @@
#!/usr/bin/env fish

function gender-swap -d 'Swaps gender'
"$_agw_dir_rc"/text/gender-swap $args
end

## EOF

+ 131
- 0
text/gender-swap View File

@@ -0,0 +1,131 @@
#!/usr/bin/env ruby

require 'erb'
require 'net/http'
require 'uri'
require 'json'
require 'cgi'

# Flattens any data structure to URL parameters, recursively. Because
# apparently the standard library just doesn't fucking provide this.
# Oh well. At least it isn't something as simple as *recursively
# copying an array* (looking at you Lua.)
def url_params param, key, output = {}
case
when param.is_a?(Array)
param.map.with_index do |v, k|
url_params(v, key + "[" + k.to_s + "]", output)
end
when param.is_a?(Hash)
param.map do |k, v|
url_params(v, key + "[" + k.to_s + "]", output)
end
else
output[key] = CGI.unescapeHTML param.to_s.gsub /<\/?[^>]*>/, ""
end
output
end

CLIENT_KEY = ENV["_agw_secret_gender_swap_client_key"]
CLIENT_SECRET = ENV["_agw_secret_gender_swap_client_secret"]
ACCESS_TOKEN = ENV["_agw_secret_gender_swap_access_token"]

ALIGNMENT = ARGV.pop
PRESENTATION = ARGV.pop
PRONOUNS = ARGV.pop.split("/").map do |pro|
path = if pro == "they" then "they/.../themself" else pro end
%(<a href="http://pronoun.is/#{path}">#{pro}</a>)
end

Net::HTTP.start("social.greyserv.net", use_ssl: true) do |http|
auth = {
"Authorization" => "Bearer " + ACCESS_TOKEN,
}
status = <<_end_
pronouns: #{PRONOUNS.join "/"}
presentation: #{PRESENTATION}
alignment: #{ALIGNMENT}
_end_
fields = http.get(
"/api/v1/accounts/verify_credentials",
auth,
).body
fields = JSON.parse(fields)["fields"].map do |field|
if field["name"] == "current pronouns"
field["value"] = PRONOUNS.join "/"
end
field.delete "verified_at"
field
end
http.patch(
"/api/v1/accounts/update_credentials",
URI.encode_www_form(url_params(fields, "fields_attributes")),
auth,
)
http.post(
"/api/v1/statuses",
URI.encode_www_form(
"status" => status,
"in_reply_to_id" => "104612572584164654",
"spoiler_text" => "current gender",
"visibility" => "unlisted",
"language" => "en"
),
auth,
)
end

template = ERB.new <<html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>
<link rel="stylesheet" type="text/css" href="/main.css"/>
<title>Gender</title>
</head>

<body>
<h3 class="t-center">Current</h3>
<table class="m-center">
<tr>
<td>Pronouns</td>
<td>
<ul>
<% PRONOUNS.each do |pro| %>
<li><%= pro %></li>
<% end %>
</ul>
</td>
</tr>
<tr>
<td>Presentation</td>
<td><%= PRESENTATION %></td>
</tr>
<tr>
<td>Alignment</td>
<td><%= ALIGNMENT %></td>
</tr>
</table>
<h3 class="t-center">Explanation</h3>
<p>I am <a
href="https://nonbinary.wiki/wiki/Genderflux">genderflux</a>,
and my gender identity changes often. The information on this
page will be up to date with my Mastodon account, so please
check either of them if you're wondering how to most correctly
address me at a given time! Please note that it is always fine
to use <a
href="https://pronoun.is/they/.../themself">they/them</a> for
me, and I don't usually mind if pronouns other than what I'm
currently using are used.</p>
</body>
</html>
html

Net::HTTP.post(
URI("https://fuck.greyserv.net/gender.cgi"),
template.result,
"Content-Type" => "text/html",
)

# EOF

Loading…
Cancel
Save