More news on the previously announced bridge for support MUC: we got another bridge set up. This time around, IRC joins the ballet, so matterbridge is now bridging @wpn support MUC for 3 different protocols.. XMPP and MATRIX being the previous other two.
https://health.woodpeckersnest.space/
On this matter I was thinking about making a "tombstone" of the current XMPP MUC, which is called status
and move to wpn
- In fact that's the name of the MATRIX and IRC rooms. This is not really something I want to do soon, though, because it implies changing several things.
Last, but not least, I have also set up an anonymous VirtualHost in Prosody. You can now login to anon.woodpeckersnest.space
with a disposable account (whose data gets deleted from the server as soon as the account is not connected anymore) and participate/discuss in @wpn MUCs - access to external servers is not permitted to anonymous users, for obvious security concerne.
You can follow the steps in this GIF to connect anonymously with Gajim; Dino should also support it but I don't know how it's done.. Finally if you want to join via Android, these are the instructions provided by Daniel Gultsch, from Conversations IM:
you can just add the account something@anon.woodpeckersnest.space with an empty password to #Conversations_im and it will login anonymously.
Anonymous logins don't require registration. When I say 'something@anon...' you can use anything as that username. Doesn't matter (it's only used to get through the client side jid validation check)
TIP: If the server tells you can't join a MUC, make sure you have added a nickname in your profile's details (Android).
You can try this script on #fediverso at irc.libera.chat, where me, cage, ndo and other friends hang out
bot: "verne", running on @wpn
SearXNG instance: https://search.woodpeckersnest.space/
Thanks to cage for the script and ndo for creating the channel o/
# © cage released under CC0, public domain
# https://creativecommons.org/publicdomain/zero/1.0/
# Date: 16-08-2024
# Version: 0.1
# Package description: do a web search using your searxng instance
# Public ones won't probably work because of "limiter"
# Authorize your channel from the partyline with:
# .chanset +searxng #your-channel
# Do a search
# .search <query> | .search paris (this query goes to default engine)
# .search +<engine> <query> | .search +wp paris (this query goes to
# wikipedia)
# .search !images paris | this query search only paris' images
# List of engines: https://docs.searxng.org/user/configured_engines.html
# tcllib is required
############## configuration directives ############################
# url of the HTTP(S) server of the search engine
set searxconfig(website_url) "https://example.com/searxng"
# serach command to trigger the search
set searxconfig(cmd) ".search"
# default search engine
set searxconfig(default_engine) "ddg"
# maximum number of search results printed
set searxconfig(max_results) 3
# time tracker file
# NB: when this script runs any file with the same name within the path in the
# working directory (depending of what is considered the working
# directory of the script) will be erased and overwritten!
set searxconfig(file_millis) "searx_millis.tmp"
# Minimum search frequency in milliseconds.
# This is the minimum time that must pass between two consecutive
# search
set searxconfig(max_freq) 30000
############## configuration ends here #############
# tcllib is required
package require csv
setudef flag searxng
if { !([info exists searxconfig(lastmillis)]) } {
set searxconfig(lastmillis) 0
}
bind pub - $searxconfig(cmd) search:searxng
proc send_message {message} {
putserv "PRIVMSG $message"
}
proc slurp_file {path} {
set fp [open $path r]
set file_data [read $fp]
close $fp
return $file_data
}
proc process_csv {csv channel} {
global searxconfig
set rows [split $csv "\n"]
set count 0
#remove the header
set rows [lrange $rows 1 [llength $rows]]
if {[llength $rows] < 1} {
send_message "$channel :Something gone wrong."
} else {
foreach row $rows {
if {$count < $searxconfig(max_results)} {
set row_splitted [csv::split $row]
set title [lindex $row_splitted 0]
set url [lindex $row_splitted 1]
send_message "$channel :$title $url"
incr count
} else {
break
}
}
}
}
proc encode {query} {
set query [regsub -all { } $query "%20"]
set query [regsub -all {&} $query "%26"]
set query [regsub -all {=} $query "%3D"]
set query [regsub -all {!} $query "%21"]
}
proc get_query_results {engine query} {
global searxconfig
set query [encode $query]
set engine [encode $engine]
set url "$searxconfig(website_url)search?q=$query&format=csv&engines=$engine"
## decomment the line below for debugging purposes
# putlog $url
return [exec curl -sS $url]
}
proc get_last_millis { } {
global searxconfig
if {[file exists $searxconfig(file_millis)]} {
set searxconfig(lastmillis) [slurp_file $searxconfig(file_millis)]
} else {
set fp [open $searxconfig(file_millis) w]
puts $fp 0
close $fp
get_last_millis
}
}
proc set_last_millis { } {
global searxconfig
set fp [open $searxconfig(file_millis) w]
puts $fp [clock milliseconds]
close $fp
}
proc search:searxng {nick host hand chan text} {
global searxconfig
if {!([channel get $chan searxng])} {
send_message "$chan :This script has not been authorized to run in this channel."
return 0
}
set millis [clock milliseconds]
get_last_millis
if { [expr $millis - $searxconfig(lastmillis)] > $searxconfig(max_freq) } {
## test antiflood superato
set_last_millis
set text_splitted [split $text " {}"]
set engine [lindex $text_splitted 0]
set text_length [llength $text_splitted]
set query [lrange $text_splitted 1 $text_length]
if {![regexp {^\+} $engine]} {
set engine $searxconfig(default_engine)
set query $text_splitted
} else {
set engine [string range $engine 1 [string length $engine]]
}
if {$query == {}} {
send_message "$chan :Missing search criteria."
} else {
set csv [get_query_results $engine $query]
process_csv $csv $chan
}
return 1;
}
send_message "$chan :Try again later."
return 0
}
putlog "SearXNG Loaded"`
gemlog