Heisenbridge a bouncer-style Matrix IRC bridge

Overview

Heisenbridge

a bouncer-style Matrix IRC bridge.

Heisenbridge brings IRC to Matrix by creating an environment where every user connects to each network individually like they would with a traditional IRC bouncer. Simplicity is achieved by exposing IRC in the most straightforward way as possible where it makes sense so it feels familiar for long time IRC users and prevents hiding protocol level events to help diagnose integration issues.

These compromises also mean that some IRC or Matrix features are managed with text commands rather than using the Matrix UI directly and some Matrix features that may seem to match IRC are not available anyway. Users on IRC should not know you are using Matrix unless you send media that is linked from your homeserver.

Please file an issue when you find something is missing or isn't working that you'd like to see fixed. Also bear in mind this project is still in very early stages of development so many things are missing or outright broken. Pull requests are more than welcome!

Support and development discussion in #heisenbridge:vi.fi

Use matrix-appservice-irc instead if you need to plumb rooms between Matrix and IRC seamlessly or need to connect large amounts of users.

Features

  • "zero configuration" - no databases or storage required
  • brings IRC to Matrix rather than Matrix to IRC - not annoying to folks on IRC
  • completely managed through admin room - just DM @Heisenbridge!
  • channel management through bridge bot - type Heisenbridge: help to get started!
  • online help within Matrix
  • access control for local and federated users
  • fully puppeted users from IRC, they come and go as they would on Matrix
  • tested with up to 1600 users in a single channel
  • IRCnet !channels are supported, you're welcome
  • any number of IRC networks and users technically possible
  • channel customization by setting the name and avatar
  • TLS support for networks that have it
  • customizable ident support
  • long message splitting directly to IRC
  • automatic identify/auth with server password or command on connect

Docker

The master branch is automatically published to Docker Hub:

docker pull hif1/heisenbridge
docker run --rm hif1/heisenbridge -h

Usage

usage: python -m heisenbridge [-h] [-v] -c CONFIG [-l LISTEN_ADDRESS]
                              [-p LISTEN_PORT] [-u UID] [-g GID] [-i]
                              [--generate] [--reset] [-o OWNER]
                              [homeserver]

a Matrix IRC bridge

positional arguments:
  homeserver            URL of Matrix homeserver (default:
                        http://localhost:8008)

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         logging verbosity level: once is info, twice is debug
                        (default: 0)
  -c CONFIG, --config CONFIG
                        registration YAML file path, must be writable if
                        generating (default: None)
  -l LISTEN_ADDRESS, --listen-address LISTEN_ADDRESS
                        bridge listen address (default: 127.0.0.1)
  -p LISTEN_PORT, --listen-port LISTEN_PORT
                        bridge listen port (default: 9898)
  -u UID, --uid UID     user id to run as (default: None)
  -g GID, --gid GID     group id to run as (default: None)
  -i, --identd          enable identd on TCP port 113, requires root (default:
                        False)
  --generate            generate registration YAML for Matrix homeserver
  --reset               reset ALL bridge configuration from homeserver and
                        exit
  -o OWNER, --owner OWNER
                        set owner MXID (eg: @user:homeserver) or first talking
                        local user will claim the bridge (default: None)

Install

  1. Install Python 3.6 or newer

  2. Install dependencies in virtualenv

    virtualenv venv
    source venv/bin/activate
    pip install git+https://github.com/hifi/heisenbridge
  3. Generate registration YAML

    python -m heisenbridge -c /path/to/synapse/config/heisenbridge.yaml --generate
  4. Add heisenbridge.yaml to Synapse appservice list

  5. (Re)start Synapse

  6. Start Heisenbridge

    python -m heisenbridge -c /path/to/synapse/config/heisenbridge.yaml
  7. Start a DM with @heisenbridge:your.homeserver to get online usage help

To update your installation, run pip install --upgrade git+https://github.com/hifi/heisenbridge

Develop

  1. Install Python 3.6 or newer

  2. Install dependencies

    virtualenv venv
    source venv/bin/activate
    pip install -e .[dev,test]
  3. (Optional) Set up pre-commit hooks

    pre-commit install

The pre-commit hooks are run by the CI as well.

Comments
  • Media URLs are incorrect

    Media URLs are incorrect

    Hi,

    This is similar to this issue https://github.com/matrix-org/matrix-appservice-irc/issues/154

    I'm running Heisenbridge in a container, and the address of the homeserver I pass to it is an internal URL http://synapse:8008/. When I upload media to IRC, the resulting URL starts with http://synapse:8008/.

    I'd like to have a way to specify an arbitrary domain instead, as is done with the upstream IRC appservice (media_url option).

    Thanks!

    opened by lenormf 11
  • @heisenbridge user not available on Conduit.rs

    @heisenbridge user not available on Conduit.rs

    Hello

    am trying to get this to work with the Conduit.rs homeserver.

    On the conduit side everything seems to be working and I added the content of the heisenbridge.yaml as described in the Conduit docu: https://gitlab.com/famedly/conduit/-/blob/master/APPSERVICES.md

    But when I start heisenbridge (connecting to http://localhost:6167 which is where Conduit runs) I just get the message about the version and the domain of my homeserver, but I can't start a DM with the @heisenbridge:myhomeserverdomain user.

    It just says that the user is invited to the room...

    As I am pretty new to this Matrix thing, I might be overlooking something, but it seems this might be a bug either in Heisenbridge or Conduit?

    opened by poVoq 10
  • Any way to set this up to connect to multiple servers?

    Any way to set this up to connect to multiple servers?

    I find the description to be very confusing. I currently use an IRC client connected to multiple servers through three separate ZNC instances. One network I am connected as X on ZNC X, another network I am connected as Y on ZNC Y, but both ZNC instances could also be connected to the same network, in some cases even joining the same channels. I would like to attach all these to the same Matrix user, so that I can access them all from within Element. The experience I am looking for would be to have a group per connection, so one group called X-server1, one group called X-server2, one group called Y-server1 etc, giving me that same separation between channels and PMs on various IRC networks as I have now.

    Is this possible? I would think that the bouncer mode would be correct for this, but can this map the same Matrix user to multiple different IRC users, or would this remove the separation I have going on?

    opened by IeuanK 7
  • Re-send edited messages

    Re-send edited messages

    Hi,

    I got the following message after editing a message:

    Editing messages is not supported on IRC, edited text was NOT sent.
    

    I think the right behaviour would be to simply re-send the edited message, if that's possible?

    Thanks!

    opened by lenormf 6
  • More mypy

    More mypy

    The init methods got removed and replaced by proper constructors, where possible. I don't really know if the code actually works, so handle with care ^^.

    opened by piegamesde 6
  • Strange blank notices from bot in control room

    Strange blank notices from bot in control room

    I'm getting a decent amount of strange, empty m.notice messages in one of my IRC network control rooms. I'm not sure what info might be useful here, primarily because I'm not exactly sure what is happening to try to reproduce it and only one of my networks is doing it. The network in question seems to be running UnrealIRCd-5.2.2-git.

    Here is a screenshot of the messages. They're blank so I guess not that interesting:

    Screen Shot 2022-03-29 at 16 46 50

    And here is the "view source" of one of the messages. I redacted the room_id and sender. I don't know if they're actually anything to worry about sharing, though.

    {
      "content": {
        "body": "",
        "msgtype": "m.notice"
      },
      "origin_server_ts": 1648585303893,
      "sender": "@heisenbridge:<redacted>",
      "type": "m.room.message",
      "unsigned": {
        "age": 80
      },
      "event_id": "$Kx6XKEfX4-rTZohjw7p_PPVKqOJ-GpzlJoX5wr1h6J0",
      "room_id": "<redacted>"
    }
    
    opened by ahanselka 5
  • Strips @ from URLs making it impossible to share many Mastodon URLs

    Strips @ from URLs making it impossible to share many Mastodon URLs

    We found this strange issue that the bridge (in plumb mode) seems to strip @ signs from URLs, which is a problem when sharing links to Mastodon posts.

    opened by poVoq 4
  • Don't touch my URLs!

    Don't touch my URLs!

    Heisenbridge should not do any processing with any tokens that might parse as URI. Currently, try sending an URL containing an @mention, and the '@' will disappear from the posted URL, rendering the link invalid.

    opened by piegamesde 4
  • Hide invites in a hidden room

    Hide invites in a hidden room

    Makes use of version 9 rooms ability to be restricted to allow users who are members of another rooms. Joins all puppeted users into the hidden room first, if one is set for the channel. Avoids invite spam in the actual rooms.

    Migration of existing rooms is possible via room level command, if they are first migrated to version 9 via external means (most Clients can do that with a simple command).

    opened by BtbN 4
  • RELAYMSG sending support

    RELAYMSG sending support

    We are now draft/relaymsg aware enough to send them and filter out our own relayed messages.

    The tag after relayed name defaults to "m" and is configurable with RELAYTAG plumbed room command.

    opened by hifi 4
  • Invalid JSON (Synapse)

    Invalid JSON (Synapse)

    Hi,

    Recently my bridge has stopped working - I think this coincides with the update to synapse 1.47.0, which manifests like this:

    Traceback (most recent call last):
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/__main__.py", line 171, in _on_mx_event
        await room.on_mx_event(event)
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/room.py", line 106, in on_mx_event
        await handler(event)
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/private_room.py", line 628, in on_mx_message
        await self.serv.api.post_room_receipt(event["room_id"], event["event_id"])
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/matrix.py", line 254, in post_room_receipt
        return await self.call("POST", f"/_matrix/client/r0/rooms/{room_id}/receipt/{receipt_type}/{event_id}")
      File "/root/heisenbridge/lib/python3.9/site-packages/heisenbridge/matrix.py", line 92, in call
        raise self._matrix_error(ret)
    heisenbridge.matrix.MatrixError: M_NOT_JSON
    

    and on synapse:

    2021-11-22 16:36:09,025 - synapse.http.servlet - 620 - WARNING - POST-69100 - Unable to parse JSON: Expecting value: line 1 column 1 (char 0) (b'')
    

    I'm not sure if I can dump the json easily, unless there is a heisenbridge flag I can pass to have it spew out debug?

    While control rooms work fine, any attempt to send (or receive) messages in joined irc channels/PMs cause the above

    opened by jwh 4
  • Allow quoting full messages when replying

    Allow quoting full messages when replying

    This adds a configuration option quote_messages which allows quoting full messages when replying to a message in Matrix.

    Disabled (default, and current behavior):

    <alice> hello
    <bob> alice: hi
    

    Enabled:

    <alice> hello
    <bob> > alice: hello
    <bob> hi
    

    I find that when there are a lot of people talking on a channel, or when answering an old message, quoting it fully makes more sense than just mentioning the author.

    Since I didn't want to change the behavior too much, I kept the current behavior as the default, but I suggest we change the default to the new behavior (or even remove the config option and make it the only behavior...?).

    opened by blastrock 5
  • Disable Heisenbridge reactions on relaybotted rooms (or add config key)

    Disable Heisenbridge reactions on relaybotted rooms (or add config key)

    When a room has hundreds of users and only fraction of them come from IRC, the reactions (scissors, chain, ...) just confuse users.

    image

    IRC bridge should remain silent when it's in relaybot mode or alternatively it should be a configuration option per channel.

    opened by zouppen 0
  • error with

    error with "status" command

    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]: ERROR:root:Ignoring exception from room handler. This should be fixed.
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]: Traceback (most recent call last):
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/__main__.py", line 202, in _on_mx_event
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await room.on_mx_event(event)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/room.py", line 100, in on_mx_event
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await handler(event)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/control_room.py", line 240, in on_mx_message
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await self.commands.trigger(command, tail)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/command_parse.py", line 95, in trigger
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await self.trigger_args(args, tail, allowed, forward)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/command_parse.py", line 79, in trigger_args
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     await func(cmd_args)
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:   File "/opt/heisenbridge/heisenbridge/control_room.py", line 412, in cmd_status
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]:     users.sort()
    Aug 26 20:39:22 pandora.woodpeckersnest.space matrix-heisenbridge[4051808]: TypeError: '<' not supported between instances of 'str' and 'NoneType'
    
    opened by roughnecks 0
  • Bot not working

    Bot not working

    Since a while now, the bridge bot is not working anymore, I'm not sure, but maybe since the last synapse update? Also tried installing it on a new instance of synapse but isn't working either. These are the verbose logs I got when starting the bridge and joining a room with it:

    (mautrix-irc) [email protected]:/opt/mautrix-irc# python -m heisenbridge -c /opt/mautrix-irc/registration.yaml --verbose
    Heisenbridge v1.13.1
    INFO:root:We are @heisenbridge:flowerhouse.at
    INFO:root:We (@heisenbridge:flowerhouse.at) are not a server admin, inviting puppets is required.
    INFO:aiohttp.access:127.0.0.1 [19/Aug/2022:17:57:48 +0000] "PUT /transactions/127?access_token=********* HTTP/1.1" 200 158 "-" "Synapse/1.65.0"
    INFO:root:Got an invite from @fabian:flowerhouse.at
    INFO:root:Whitelisted user @fabian:flowerhouse.at invited us, going to accept.
    ERROR:root:Failed to create control room.
    Traceback (most recent call last):
      File "/opt/mautrix-irc/lib/python3.9/site-packages/heisenbridge/__main__.py", line 268, in _on_mx_event
        await room.save()
      File "/opt/mautrix-irc/lib/python3.9/site-packages/heisenbridge/room.py", line 88, in save
        await self.az.intent.set_account_data("irc", config, self.id)
    AttributeError: 'ControlRoom' object has no attribute 'az'
    

    Version: {"server_version":"1.65.0","python_version":"3.9.2"} Heisenbridge version: 1.13.1

    opened by Tropaion 4
  • Can't join channels with non-ascii characters

    Can't join channels with non-ascii characters

    ...or at the very least channels with Japanese characters in them. For example, if I try to join #日本語 on euirc, I get the following:

    screenshot

    Is that an actual problem or am I just doing something dumb?

    bug 
    opened by Rouji 3
Releases(v1.14.0)
  • v1.13.0(May 18, 2022)

    • Read default port and listen address from config url (@BtbN)
    • Improvements to pillifying IRC nicks, again
    • Fixes for AUTOQUERY not always working correctly
    • Allow anyone to use STATUS command to get their own status
    • Filter control characters only for plumbs so people can send garbage to IRC if they wish from Matrix
    • Support for converting IRC color codes to Matrix (@tjaderxyz)
    • Fixed compose docker Synapse configuration for registration
    • Improved Python 3.10 compatibliy (@BtbN)
    • Hidden room to hide joins using restricted rooms join rule (@BtbN)

    Enabling hidden room functionality additionally requires either re-joining channels or having them already at v9 and using the UPGRADE command.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.13.0.tar.gz(66.58 KB)
  • v1.12.0(Apr 22, 2022)

    • Make MAXLINES and PASTEBIN option available to every room & global defaults (thanks @BtbN)
    • Fix 'NoneType' is not iterable error (thanks @BtbN)
    • Upgrade to Mautrix 0.16

    Not much to see here. A small contribution release which is always a nice thing when people come around and help 🤗.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.12.0.tar.gz(62.61 KB)
  • v1.11.0(Apr 3, 2022)

    • Fixed retry behavior on startup to wait for HS startup
    • Ignore TAGMSG messages from IRC server
    • Fixed HTML messages not working as commands
    • Fixed room aliases in messages dropping the message completely
    • Upgrade to Mautrix 0.15

    This release also breaks support for homeservers not supporting the "v3" API path so if you run Synapse 1.47 or older the bridge will not start.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.11.0.tar.gz(62.23 KB)
  • v1.10.0(Jan 14, 2022)

    • RELAYMSG sending support 🚀
    • Allow forwarding all IRC noise to network room
    • Support ZNC self-message caps ✅
    • Support CHGHOST caps (prevents leave+join on host change) ✅
    • Fix owner auto-registration (regression) 🐛
    • Upgrade to Mautrix 0.14 ⬆️

    Not a breaking change but the caps support will cause connections to networks that ignore CAP requests take a few seconds longer unless you remove all the default caps for said network and it will never try requesting them again.

    Mautrix 0.14 upgrade bumps the minimum version as well so packages beware.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.10.0.tar.gz(61.87 KB)
  • v1.9.0(Dec 29, 2021)

    • Spaces support 🌃
    • Proper SASL external with CertFP with mechanism override option (see notes)
    • Disconnect and cleanup from networks that have no rooms open ♻️
    • Reply (and reject) DM requests to ghosts with QUERY command ↪️
    • Try to keep IRC users in the room at all costs if they are on the IRC channel
    • Prevent accidental namespace changes to cause mayhem
    • Conduit support was broken in 1.8.x but fixed again in 1.9.0, sorry

    Upgrade warning: CertFP SASL has been updated to do SASL external flow by default. If you are upgrading and have used CertFP with OFTC you need to run SASL --mechanism=none for it to connect again.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.9.0.tar.gz(60.58 KB)
  • v1.8.1(Dec 24, 2021)

  • v1.8.0(Dec 20, 2021)

  • v1.7.1(Nov 22, 2021)

  • v1.7.0(Nov 18, 2021)

    • Implement "best effort" basic IRC moderation in plumbed rooms if bot has ops on IRC
    • Allow configuring topic sync for plumbs (IRC<->Matrix or one way)
    • Allow using forward slash (/) as MXID separator for IRC ghosts
    • Bump max mautrix version to <0.12

    The separator for IRC ghosts can now be changed to forward slash (/) from the default underscore (_). This happens by modifying the regex in the registration file. Only do this for new installations and it will cause all IRC users to duplicate in rooms who you can't remove and probably other bad side effects as well. The default may be changed in the future.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.7.0.tar.gz(59.23 KB)
  • v1.6.0(Nov 12, 2021)

  • v1.5.0(Nov 5, 2021)

    • Allow opening multiple simultaneous connections to the same network
    • New STOP/STAHP ROOM command to end a long paste flood
    • Clear channel send queue if the user gets kicked to prevent continuing flood on rejoin
    • New KB ROOM command to do a proper kick & ban (contributed by GitHub user @blastrock, thanks!)

    Upgrading from previous version to v1.5.0 will cause a small migration for every channel/pm that is open so it might take a little longer for the first startup to complete. If no multiple network connections are opened it is safe to downgrade but if someone uses the feature it will cause shenanigans for the duplicate networks in the older version.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.5.0.tar.gz(57.53 KB)
  • v1.4.1(Oct 30, 2021)

  • v1.4.0(Oct 28, 2021)

    • Free form AUTOCMD after joining a channel, per channel
    • Automatic rejoin on invite or kick (invite enabled by default)
    • AVATAR network room command to set avatars for IRC users (admin only)
    • WHOIS room command for PMs, PART for channels
    • Add ROOM command in network room to run channel room commands safely
    • Move PLUMBCFG stuff under ROOM command

    QoL stuff, remember to use ROOM command instead of PLUMBCFG now.

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.4.0.tar.gz(56.53 KB)
  • v1.3.0(Oct 21, 2021)

  • v1.2.1(Sep 30, 2021)

  • v1.2.0(Sep 23, 2021)

    • Message formatting (from HTML to text) has been drastically improved
    • CTCP replies are now shown correctly but still ignored
    • Mentions/pills always honor room nick
    • Plumb notices don't loop around anymore
    • Self replies don't prefix with own nick
    • Single line truncation works when max lines is 1
    • Multiple fixes to displaynames or messages containing control characters leaking to IRC
    • New dependency: mautrix-python
    • Minimum Python version requirement has been bumped to 3.7

    PyPI: https://pypi.org/project/heisenbridge/1.2.0/

    Source code(tar.gz)
    Source code(zip)
    heisenbridge-1.2.0.tar.gz(50.39 KB)
  • v1.1.2(Sep 21, 2021)

  • v1.1.1(Sep 17, 2021)

  • v1.1.0(Sep 14, 2021)

    • Message edits are now supported and use stupid context aware "compact enough" edit format (+ - *)
    • Media will be quarantined if you redact them and the bridge is an admin on the HS
    • Public media URL can now be overridden in control room if auto-detection fails
    • New plumbs respect the default member sync setting
    • ; is included in pill separators
    Source code(tar.gz)
    Source code(zip)
    heisenbridge-v1.1.0.tar.gz(46.73 KB)
  • v1.0.1(Sep 3, 2021)

    Show part reason, fix emotes after refactoring just before 1.0.0, fix CTCP leaking on plumbs, show real errors when debugging connectivity issues in verbose mode.

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Aug 17, 2021)

Owner
Toni Spets
🤔🤔🤔🤦
Toni Spets
Download and process GOES-16 and GOES-17 data from NOAA's archive on AWS using Python.

Download and display GOES-East and GOES-West data GOES-East and GOES-West satellite data are made available on Amazon Web Services through NOAA's Big

Brian Blaylock 88 Dec 16, 2022
Allows you to purge all reply comments left by a user on a YouTube channel or video.

YouTube Spammer Purge Allows you to purge all reply comments left by a user on a YouTube channel or video. Purpose Recently, there has been a massive

4.3k Jan 09, 2023
A python script for compiling and executing .cc files

Debug And Run A python script for compiling and executing .cc files Example dbrun fname.cc [DEBUG MODE] Compiling fname.cc with C++17 ------------

1 May 28, 2022
An alternative site to emplea.do due to inconsistent service of the app.

feline a agile and fast alternative to emplea.do License: MIT Settings Moved to settings. Basic Commands Setting Up Your Users To create a normal user

Codetiger 8 Nov 10, 2021
🛠️ Plugin to integrate Chuy with Poetry

Archived This is bundled with Chuy since v1.3.0. Poetry Chuy Plugin This plugin integrates Chuy with Poetry. Note: This only works in Poetry 1.2.0 or

Eliaz Bobadilla 4 Sep 24, 2021
Donatus Prince 6 Feb 25, 2022
Yet another Airflow plugin using CLI command as RESTful api, supports Airflow v2.X.

中文版文档 Airflow Extended API Plugin Airflow Extended API, which export airflow CLI command as REST-ful API to extend the ability of airflow official API

Eric Cao 106 Nov 09, 2022
token vesting escrow with cliff and clawback

Yearn Vesting Escrow A modified version of Curve Vesting Escrow contracts with added functionality: An escrow can have a start_date in the past.

62 Dec 08, 2022
Traductor de webs desde consola usando el servicio de Google Traductor.

proxiGG Traductor de webs desde consola usando el servicio de Google Traductor. Se adjunta el código fuente para Python3 y un binario compilado en C p

@as_informatico 2 Oct 20, 2021
Mannaggia is a python application to praise or more likely to curse the saints

Mannaggia-py 👼 Remember Mannaggia? This is a Python remake of it, with new features. mannaggia is a python application to praise or more likely to cu

Christian Visintin 9 Aug 12, 2022
A simple and efficient computing package for Genshin Impact gacha analysis

GGanalysisLite计算包 这个版本的计算包追求计算速度,而GGanalysis包有着更多计算功能。 GGanalysisLite包通过卷积计算分布列,通过FFT和快速幂加速卷积计算。 测试玩家得到的排名值rank的数学意义是:与抽了同样数量五星的其他玩家相比,测试玩家花费的抽数大于等于比例

一棵平衡树 34 Nov 26, 2022
Create beautiful diagrams just by typing mathematical notation in plain text.

Penrose Penrose is an early-stage system that is still in development. Our system is not ready for contributions or public use yet, but hopefully will

Penrose 5.6k Jan 08, 2023
A simple wrapper to analyse and visualise reinforcement learning agents' behaviour in the environment.

Visrl Visrl (pronounced "visceral") is a simple wrapper to analyse and visualise reinforcement learning agents' behaviour in the environment. Reinforc

Jet New 14 Jun 27, 2022
Bible-App : Simple Tool To Show Bible Books

Bible App Simple Tool To Show Bible Books Socials: Language:

ميخائيل 5 Jan 18, 2022
py-js: python3 objects for max

Simple (and extensible) python3 externals for MaxMSP

Shakeeb Alireza 39 Nov 20, 2022
skimpy is a light weight tool that provides summary statistics about variables in data frames within the console.

skimpy Welcome Welcome to skimpy! skimpy is a light weight tool that provides summary statistics about variables in data frames within the console. Th

267 Dec 29, 2022
This synchronizes my appearances with my calendar

Josh's Schedule Synchronizer Here's the "problem:" I use a Google Sheets spreadsheet to maintain all my public appearances.

Developer Advocacy 2 Oct 18, 2021
A Python wrapper for Matrix Synapse admin API

Synapse-admin-api-python A Python wrapper for Matrix Synapse admin API. Versioning This library now supports up to Synapse 1.45.0, any Admin API intro

Knugi 9 Sep 28, 2022
Osintgram by Datalux but i fixed some errors i found and made it look cleaner

OSINTgram-V2 OSINTgram-V2 is made from Osintgram which is made by Datalux originally but i took the script and fixed some errors i found and made the

2 Feb 02, 2022
the classic version Of torrentleechx #Unmaintained #Archived

TorrentleechX-Classic Old Modified Version Repo #Unmaintained #Archived for support join here working example group Leech Here For Any Issues/Imroveme

XcodersHub 18 Jan 30, 2022