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
This library is an ongoing effort towards bringing the data exchanging ability between Java/Scala and Python

PyJava This library is an ongoing effort towards bringing the data exchanging ability between Java/Scala and Python

Byzer 6 Oct 17, 2022
Data-driven Computer Science UoB

COMS20011_2021 Data-driven Computer Science UoB Staff Laurence Aitchison [ 6 May 16, 2022

GWCelery is a simple and reliable package for annotating and orchestrating LIGO/Virgo alerts

GWCelery is a simple and reliable package for annotating and orchestrating LIGO/Virgo alerts, built from widely used open source components.

Min-A Cho Zeno 1 Nov 02, 2021
🌍💉 Global COVID-19 vaccination data at the regional level.

COVID-19 vaccination data at subnational level. To ensure its officiality, the source data is carefully verified.

sociepy 61 Sep 21, 2022
A Modern Fetch Tool for Linux!

Ufetch A Modern Fetch Tool for Linux! Programming Language: Python IDE: Visual Studio Code Developed by Avishek Dutta If you get any kind of problem,

Avishek Dutta 7 Dec 12, 2021
This repository contains code for building education startup.

Learning Management System Overview It's the code for EssayBrain, a tool for teacher that automatically grades and validates essays. In order to valid

Shyam Das Shrestha 1 Nov 21, 2021
Tools I'm building in order to help my investments decisions

b3-tools Tools I'm building in order to help my investments decisions. Based in the REITs I've in my personal portifolio I ran a script that scrapy th

Rafael Cassau 2 Jan 21, 2022
The fastest way to copy to (not from) high speed flash storage.

FastestCopy The fastest way to copy to (not from) high speed flash storage. This is about 3-6x faster than file copy on explorer.exe to usb flash driv

Derek Frombach 0 Nov 03, 2021
Robotic hamster to give you financial advice

hampp Robotic hamster to give you financial advice. I am not liable for any advice that the hamster gives. Follow at your own peril. Description Hampp

1 Nov 17, 2021
A repository of study materials related to Think Python 2nd Edition by Allen B. Downey. More information about the book can be found here: https://greenteapress.com/wp/think-python-2e/

Intro-To-Python This content is based on the book Think Python 2nd Edition by Allen B. Downey. More information about the book can be found here: http

Brent Eskridge 63 Jan 07, 2023
Create N Share is a No Code solution which gives users the ability to create any type of feature rich survey forms with ease.

create n share Note : The Project Scaffold will be pushed soon. Create N Share is a No Code solution which gives users the ability to create any type

Chiraag Kakar 11 Dec 03, 2022
API for SpeechAnalytics integration with FreePBX/Asterisk

freepbx_speechanalytics_api API for SpeechAnalytics integration with FreePBX/Asterisk Скопировать файл settings.py.sample в settings.py и отредактиров

Iqtek, LLC 3 Nov 03, 2022
Find habits that genuinely increase your productivity

BiProductive Description This repository contains the application BiProductive, which analyzes the habits of the person, tests his productivity, and d

Rizvan Iskaliev 43 Jun 11, 2022
A simple, fantasy and fast note taking program.

notes A simple, fantasy and fast note taking program Installation This program supposed to run in linux and may have some bugs on windows or any other

Ali Hosseinverdi 1 Apr 06, 2022
Program to send ROM files to Turbo Everdrive; reverse-engineered and designed to be platform-independent

PCE_TurboEverdrive_USB What is this "TurboEverdrive USB" thing ? For those who have a TurboEverdrive v2.x from krikzz.com, there was originally an opt

David Shadoff 10 Sep 18, 2022
This is the old code for bitcoin risk metric, the whole purpose form it is to help you DCA your investment according to bitcoin risk.

About The Project This is the old code for bitcoin risk metric, the whole purpose form it is to help you DCA your investment according to bitcoin risk

BitcoinRaven 2 Aug 03, 2022
Various hdas (Houdini Digital Assets)

aaTools My various assets for Houdini "ms_asset_loader" - Custom importer assets from Quixel Bridge "asset_placer" - Tool for placment sop geometry on

9 Dec 19, 2022
Um pequeno painel de consulta grátis.

[PAINEL-DE-CONSULTA 3.8(BETA)] · Confira meu canal do YouTube. Clique aqui! Nota: Próxima Atualização será a última com coisas novas, o resto será par

276 Jan 05, 2023
Python pyside2 kütüphanesi ile oluşturduğum drone için yer kontrol istasyonu yazılımı.

Ground Control Station (Yer Kontrol İstasyonu) Teknofest yarışmasında yerlilik kısmında Yer Kontrol İstasyonu yazılımı seçeneği bulunuyordu. Bu yüzden

Emirhan Bülbül 4 May 14, 2022
Blender pluggin (python script) that adds a randomly generated tree with random branches and bend orientations

Blender pluggin (python script) that adds a randomly generated tree with random branches and bend orientations

Travis Gruber 2 Dec 24, 2021