Files
matrix-searxng/example.js
2025-12-15 22:20:56 -05:00

100 lines
3.5 KiB
JavaScript

const sdk = require("matrix-js-sdk");
const matrixcs = require("matrix-js-sdk/lib/matrix");
const request = require('request');
matrixcs.request(request);
const startupTime = Date.now();
// --------- The following settings are all required: ----------------------
// Provide a matrix ID, access token, and homeserver that the bot will use.
const myUserId = "@glowy:glowers.club"
const myAccessToken = "syt_TotallyMyRealAccessTokenAndNotAFake";
const homeserver = "https://glowers.club";
// Provide the link to SearXNG. Include any directories used in a search query.
const searxng_server = "https://searxng.example.com/searxng"
// --------------------------------------------------------------------------
const matrixClient = sdk.createClient({
baseUrl: homeserver,
accessToken: myAccessToken,
userId: myUserId
});
const Searx = require('./index.js');
const searx = new Searx(matrixClient)
searx.setSearxInstance(searxng_server);
// --------- The following settings are all optional: ----------------------
// This allows you to use a different Matrix user and homeserver for uploading the image results. If this is not provided then the bot's Matrix ID and homeserver will be used instead.
/*
const uploadMatrixClient = sdk.createClient({
baseUrl: "https://midov.pl",
accessToken: "syt_AnotherRealAccessTokenDoNotCommit",
userId: "@upload_leech:midov.pl"
});
searx.setUploadMatrixClient(uploadMatrixClient);
*/
// Set which rooms are not allowed to search for images.
//searx.setBlacklistedImgRooms(["!wehateimagesearching:matrix.org", "!wehateittoo:nerdsin.space"]);
// Set which rooms are not allowed to search for images with safesearch disabled.
//searx.setBlacklistedUimgRooms(["!sfw:matrix.org", "!church:nerdsin.space"]);
// Set the amount of time in milliseconds users in a room are required to wait between searches (and allow some users to be immune to the cooldown and send as many as they want)
/*
searx.setCooldownImmuneUsers(["@q:glowers.club", "@romanticusgondolaticus:glowers.club"]);
searx.setRoomCooldowns(new Map([
["!sCbWouzHiLEyfOAaSJ:midov.pl",30000]
]));
*/
// Lets you set which URL parameters are used in SearXNG queries. Useful for changing which search engines are included and excluded. See SearXNG's documentation for all of the parameters available.
//searx.setSearxParameters("disabled_engines=flickr__images");
// Lets you add a whitelist for a room. When added, only the users in that whitelist will be able to search. Other users will receive an error.
/*
searxng.setRoomUserWhitelists(new Map([
["!blahblahblah:midov.pl",
[
"@q:glowers.club",
"@romanticusgondolaticus:glowers.club"
]
]
]));
*/
// --------------------------------------------------------------------------
matrixClient.on("Room.timeline", function(event, room, toStartOfTimeline) {
if (event.getTs() >= startupTime && event.getType() == "m.room.message" && event.getContent().body != null) {
if (event.getContent().body.indexOf("!help") == 0) {
const helpMessage = "Commands:\n"+searx.getHelp();
const formattedHelpMessage = "Commands:<br />"+searx.getFormattedHelp();
const content = {
"format": "org.matrix.custom.html",
"body": helpMessage,
"formatted_body": formattedHelpMessage,
"msgtype": "m.text"
};
matrixClient.sendEvent(room.roomId, "m.room.message", content, "", (err, res) => {
if (err != null) {
console.error(err);
}
});
return;
}
searx.handleMessage(event, room);
}
});
searx.startUploadMatrixClient();
matrixClient.startClient();