arrange files even more
This commit is contained in:
		
							parent
							
								
									5b2ccdc1f8
								
							
						
					
					
						commit
						3899c01663
					
				
					 4 changed files with 62 additions and 48 deletions
				
			
		
							
								
								
									
										33
									
								
								readme.md
									
										
									
									
									
								
							
							
						
						
									
										33
									
								
								readme.md
									
										
									
									
									
								
							| 
						 | 
					@ -20,7 +20,7 @@ Most features you'd expect in both directions, plus a little extra spice:
 | 
				
			||||||
* Reactions
 | 
					* Reactions
 | 
				
			||||||
* Mentions
 | 
					* Mentions
 | 
				
			||||||
* Replies
 | 
					* Replies
 | 
				
			||||||
* Theads
 | 
					* Threads
 | 
				
			||||||
* Stickers
 | 
					* Stickers
 | 
				
			||||||
* Attachments
 | 
					* Attachments
 | 
				
			||||||
* Spoiler attachments
 | 
					* Spoiler attachments
 | 
				
			||||||
| 
						 | 
					@ -33,6 +33,7 @@ Most features you'd expect in both directions, plus a little extra spice:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Custom emojis don't fully work yet.
 | 
					* Custom emojis don't fully work yet.
 | 
				
			||||||
* Embeds don't work yet.
 | 
					* Embeds don't work yet.
 | 
				
			||||||
 | 
					* This bridge is not designed for puppetting.
 | 
				
			||||||
* Some aspects of this bridge are customised for my homeserver. I'm working over time to make it more general. Please please reach out to @cadence:cadence.moe if you would like to run this, and I'll work with you to get it running!
 | 
					* Some aspects of this bridge are customised for my homeserver. I'm working over time to make it more general. Please please reach out to @cadence:cadence.moe if you would like to run this, and I'll work with you to get it running!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Development information
 | 
					# Development information
 | 
				
			||||||
| 
						 | 
					@ -56,15 +57,21 @@ Copy `registration.example.yaml` to `registration.yaml` and fill in bracketed va
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If developing on a different computer to the one running the homeserver, use SSH port forwarding so that Synapse can connect on its `localhost:6693` to reach the running bridge on your computer. Example: `ssh -T -v -R 6693:localhost:6693 username@matrix.cadence.moe`
 | 
					If developing on a different computer to the one running the homeserver, use SSH port forwarding so that Synapse can connect on its `localhost:6693` to reach the running bridge on your computer. Example: `ssh -T -v -R 6693:localhost:6693 username@matrix.cadence.moe`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Run `node scripts/seed.js` to check your setup, then create the database and server state (only need to run this once ever)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Make sure the tests work: `npm t`
 | 
					Make sure the tests work: `npm t`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I recommend developing in Visual Studio Code so that the JSDoc x TypeScript annotations work. I don't know what other editors or language servers support annotations and type inference.
 | 
					Start the bridge: `node start.js`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Any files you change will automatically be reloaded, except for `stdin.js` and `d2m/discord-*.js`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I recommend developing in Visual Studio Code so that the JSDoc x TypeScript annotation comments work. I don't know which other editors or language servers support annotations and type inference.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Repository structure
 | 
					## Repository structure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .
 | 
					    .
 | 
				
			||||||
    * Entrypoint:
 | 
					    * Run this to start the bridge:
 | 
				
			||||||
    ├── index.js
 | 
					    ├── start.js
 | 
				
			||||||
    * Runtime configuration, like tokens and user info:
 | 
					    * Runtime configuration, like tokens and user info:
 | 
				
			||||||
    ├── config.js
 | 
					    ├── config.js
 | 
				
			||||||
    ├── registration.yaml
 | 
					    ├── registration.yaml
 | 
				
			||||||
| 
						 | 
					@ -91,30 +98,30 @@ I recommend developing in Visual Studio Code so that the JSDoc x TypeScript anno
 | 
				
			||||||
    │   ├── converters
 | 
					    │   ├── converters
 | 
				
			||||||
    │   │   └── *.js
 | 
					    │   │   └── *.js
 | 
				
			||||||
    │   └── event-dispatcher.js
 | 
					    │   └── event-dispatcher.js
 | 
				
			||||||
    * We aren't using the matrix-js-sdk, so here's all the stuff we need to call the Matrix CS API:
 | 
					    * We aren't using the matrix-js-sdk, so here's all the stuff we need to call the Matrix C-S API:
 | 
				
			||||||
    ├── matrix
 | 
					    ├── matrix
 | 
				
			||||||
    │   └── *.js
 | 
					    │   └── *.js
 | 
				
			||||||
    * Various files you can run once if you need them. Hopefully you won't need them.
 | 
					    * Various files you can run once if you need them. Hopefully you won't need them.
 | 
				
			||||||
    ├── scripts
 | 
					    ├── scripts
 | 
				
			||||||
    │   └── *.js
 | 
					    │   ├── *.js
 | 
				
			||||||
    * First time running a new bridge? Run this file to plant a seed, which will flourish into state for the bridge:
 | 
					    │   * First time running a new bridge? Run this file to plant a seed, which will flourish into state for the bridge:
 | 
				
			||||||
    ├── seed.js
 | 
					    │   └── seed.js
 | 
				
			||||||
    * You are here :)
 | 
					    * You are here! :)
 | 
				
			||||||
    └── readme.md
 | 
					    └── readme.md
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Dependency justification
 | 
					## Dependency justification
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(transitive dependency count) dependency name: explanation
 | 
					(deduped transitive dependency count) dependency name: explanation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* (0) @chriscdn/promise-semaphore
 | 
					* (0) @chriscdn/promise-semaphore: It does what I want! I like it!
 | 
				
			||||||
* (50) better-sqlite3: SQLite3 is the best database, and this is the best library for it. Really! I love it.
 | 
					* (42) better-sqlite3: SQLite3 is the best database, and this is the best library for it. Really! I love it.
 | 
				
			||||||
* (1) chunk-text: It does what I want.
 | 
					* (1) chunk-text: It does what I want.
 | 
				
			||||||
* (0) cloudstorm: Discord gateway library with bring-your-own-caching that I trust.
 | 
					* (0) cloudstorm: Discord gateway library with bring-your-own-caching that I trust.
 | 
				
			||||||
* (8) snowtransfer: Discord API library with bring-your-own-caching that I trust.
 | 
					* (8) snowtransfer: Discord API library with bring-your-own-caching that I trust.
 | 
				
			||||||
* (1) discord-markdown: This is my fork! I make sure it does what I want.
 | 
					* (1) discord-markdown: This is my fork! I make sure it does what I want.
 | 
				
			||||||
* (1) heatsync: Module hot-reloader that I trust.
 | 
					* (1) heatsync: Module hot-reloader that I trust.
 | 
				
			||||||
* (1) js-yaml: It seems to do what I want, and it's already pulled in by matrix-appservice.
 | 
					* (1) js-yaml: It seems to do what I want, and it's already pulled in by matrix-appservice.
 | 
				
			||||||
* (115) matrix-appservice: I wish it didn't pull in express :(
 | 
					* (70) matrix-appservice: I wish it didn't pull in express :(
 | 
				
			||||||
* (0) mixin-deep: This is my fork! It fixes a bug in regular mixin-deep.
 | 
					* (0) mixin-deep: This is my fork! It fixes a bug in regular mixin-deep.
 | 
				
			||||||
* (3) node-fetch@2: I like it and it does what I want.
 | 
					* (3) node-fetch@2: I like it and it does what I want.
 | 
				
			||||||
* (0) prettier-bytes: It does what I want and has no dependencies.
 | 
					* (0) prettier-bytes: It does what I want and has no dependencies.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										42
									
								
								scripts/seed.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								scripts/seed.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					// @ts-check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const assert = require("assert").strict
 | 
				
			||||||
 | 
					const fs = require("fs")
 | 
				
			||||||
 | 
					const sqlite = require("better-sqlite3")
 | 
				
			||||||
 | 
					const HeatSync = require("heatsync")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const config = require("../config")
 | 
				
			||||||
 | 
					const passthrough = require("../passthrough")
 | 
				
			||||||
 | 
					const db = new sqlite("db/ooye.db")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const sync = new HeatSync({watchFS: false})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Object.assign(passthrough, { config, sync, db })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const api = require("../matrix/api")
 | 
				
			||||||
 | 
					const file = require("../matrix/file")
 | 
				
			||||||
 | 
					const reg = require("../matrix/read-registration")
 | 
				
			||||||
 | 
					const utils = require("../m2d/converters/utils")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;(async () => {
 | 
				
			||||||
 | 
						const mxid = `@${reg.sender_localpart}:${reg.ooye.server_name}`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ensure registration is correctly set...
 | 
				
			||||||
 | 
						assert(reg.sender_localpart.startsWith(reg.ooye.namespace_prefix))
 | 
				
			||||||
 | 
						assert(utils.eventSenderIsFromDiscord(mxid))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// ensure homeserver well-known is valid and returns reg.ooye.server_name...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// upload initial images...
 | 
				
			||||||
 | 
						const avatarUrl = await file.uploadDiscordFileToMxc("https://cadence.moe/friends/out_of_your_element_rev_2.jpg")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// set profile data on homeserver...
 | 
				
			||||||
 | 
						await api.profileSetDisplayname(mxid, "Out Of Your Element")
 | 
				
			||||||
 | 
						await api.profileSetAvatarUrl(mxid, avatarUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// database ddl...
 | 
				
			||||||
 | 
						db.exec(fs.readFileSync("db/ooye-schema.sql", "utf8"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// add initial rows to database, like adding the bot to sim...
 | 
				
			||||||
 | 
						db.prepare("INSERT INTO sim (discord_id, sim_name, localpart, mxid) VALUES (?, ?, ?, ?)").run("0", reg.sender_localpart.slice(reg.ooye.namespace_prefix.length), reg.sender_localpart, mxid)
 | 
				
			||||||
 | 
					})()
 | 
				
			||||||
							
								
								
									
										35
									
								
								seed.js
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								seed.js
									
										
									
									
									
								
							| 
						 | 
					@ -1,35 +0,0 @@
 | 
				
			||||||
// @ts-check
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const assert = require("assert")
 | 
					 | 
				
			||||||
const sqlite = require("better-sqlite3")
 | 
					 | 
				
			||||||
const HeatSync = require("heatsync")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const config = require("./config")
 | 
					 | 
				
			||||||
const passthrough = require("./passthrough")
 | 
					 | 
				
			||||||
const db = new sqlite("db/ooye.db")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const sync = new HeatSync({watchFS: false})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Object.assign(passthrough, { config, sync, db })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const api = require("./matrix/api")
 | 
					 | 
				
			||||||
const file = require("./matrix/file")
 | 
					 | 
				
			||||||
const reg = require("./matrix/read-registration")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
;(async () => {
 | 
					 | 
				
			||||||
	// ensure registration is correctly set...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// test connection to homeserver...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// upload initial images...
 | 
					 | 
				
			||||||
	const avatarUrl = await file.uploadDiscordFileToMxc("https://cadence.moe/friends/out_of_your_element_rev_2.jpg")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// set profile data on homeserver...
 | 
					 | 
				
			||||||
	await api.profileSetDisplayname(`@${reg.sender_localpart}:${reg.ooye.server_name}`, "Out Of Your Element")
 | 
					 | 
				
			||||||
	await api.profileSetAvatarUrl(`@${reg.sender_localpart}:${reg.ooye.server_name}`, avatarUrl)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// database ddl...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// add initial rows to database, like adding the bot to sim...
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
})()
 | 
					 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue