<repo_name>lewdawso/gpu-bot<file_sep>/config.toml
[[products]]

name = "6800 XT"

urls = [
	"https://www.ebuyer.com/1138835-xfx-radeon-rx-6900-xt-16gb-merc-319-black-graphics-card-rx-69xtacbd9",
	"https://www.ebuyer.com/1137015-msi-radeon-rx-6800-xt-gaming-x-trio-16gb-graphics-card-rx-6800-xt-gaming-x-trio-16g",
	"https://www.ebuyer.com/1135766-asrock-radeon-rx-6800-xt-phantom-gaming-d-16gb-oc-graphics-card-rx6800xt-pgd-16go",
	"https://www.ebuyer.com/1134062-powercolor-radeon-rx-6800-xt-16gb-red-devil-graphics-card-axrx-6800xt-16gbd6-3dhe-oc",
	"https://www.ebuyer.com/1138784-gigabyte-radeon-rx-6800xt-16gb-aorus-master-type-c-graphics-card-gv-r68xtaorus-m-16gc",
	"https://www.ebuyer.com/1138504-asrock-radeon-rx-6800-xt-16gb-graphics-card-90-ga2czz-00uanf",
	"https://www.ebuyer.com/1128772-powercolor-radeon-rx-6800-xt-16gb-graphics-card-axrx-6800xt-16gbd6-m2dhc",
	"https://www.ebuyer.com/1129448-msi-radeon-rx-6800-xt-16gb-graphics-card-rx-6800-xt-16g",
	"https://www.ebuyer.com/1134038-sapphire-nitro-radeon-rx-6800-xt-oc-se-16gb-graphics-card-11304-01-20g",
	"https://www.ebuyer.com/1134212-powercolor-radeon-rx-6800-xt-16gb-red-devil-limited-edition-graphics-card-axrx-6800xt-16gbd6-2dhce-oc",
	"https://www.ebuyer.com/1134378-asus-radeon-rx-6800-xt-16gb-rog-strix-lc-oc-graphics-card-rog-strix-lc-rx6800xt-o16g-gaming",
	"https://www.ebuyer.com/1134382-gigabyte-radeon-rx-6800xt-16gb-gaming-oc-graphics-card-gv-r68xtgaming-oc-16gd",
	"https://www.ebuyer.com/1135765-asrock-radeon-rx-6800-xt-taichi-x-16gb-oc-graphics-card-rx6800xt-tcx-16go",
	"https://www.ebuyer.com/1134039-sapphire-nitro-radeon-rx-6800-xt-oc-16gb-graphics-card-11304-02-20g",
	"https://www.ebuyer.com/1134063-powercolor-radeon-rx-6800-xt-red-dragon-16gb-graphics-card-axrx-6800xt-16gbd6-3dhr-oc",
	"https://www.ebuyer.com/1134379-asus-radeon-rx-6800-xt-tuf-gaming-oc-16gb-graphics-card-tuf-rx6800xt-o16g-gaming",
	"https://www.ebuyer.com/1135696-xfx-radeon-rx-6800-xt-merc319-black-16gb-graphics-card-rx-68xtacbd9",
	"https://www.ebuyer.com/1138786-gigabyte-radeon-rx-6800xt-16gb-aorus-master-graphics-card-gv-r68xtaorus-m-16gd",
]

[[products]]

name = "6800"

urls = [
	"https://www.ebuyer.com/1139106-xfx-radeon-rx-6800-qick319-16gb-graphics-card-rx-68xlalbd9",
	"https://www.ebuyer.com/1128774-powercolor-radeon-rx-6800-16gb-graphics-card-axrx-6800-16gbd6-m2dhc",
	"https://www.ebuyer.com/1129451-msi-radeon-rx-6800-16gb-graphics-card-rx-6800-16g",
	"https://www.ebuyer.com/1133851-xfx-radeon-rx-6800-16gb-graphics-card-rx-68lmatfd8",
	"https://www.ebuyer.com/1134064-powercolor-radeon-rx-6800-16gb-red-devil-graphics-card-axrx-6800-16gbd6-3dhe-oc",
	"https://www.ebuyer.com/1134067-powercolor-radeon-rx-6800-fighter-16gb-graphics-card-axrx-6800-16gbd6-3dh-oc",
	"https://www.ebuyer.com/1134381-asus-radeon-rx-6800-16gb-tuf-gaming-oc-graphics-card-tuf-rx6800-o16g-gaming",
	"https://www.ebuyer.com/1135697-xfx-radeon-rx-6800-merc319-black-16gb-graphics-card-rx-68xlatbd9",
	"https://www.ebuyer.com/1135767-asrock-radeon-rx-6800-phantom-gaming-d-16gb-oc-graphics-card-rx6800-pgd-16go",
	"https://www.ebuyer.com/1133959-asus-radeon-rx-6800-16gb-graphics-card-rx6800-16g",
	"https://www.ebuyer.com/1134040-sapphire-nitro-radeon-rx-6800-oc-16gb-graphics-card-11305-01-20g",
	"https://www.ebuyer.com/1134066-powercolor-radeon-rx-6800-red-dragon-16gb-graphics-card-axrx-6800-16gbd6-3dhr-oc",
	"https://www.ebuyer.com/1134213-powercolor-radeon-rx-6800-16gb-red-devil-limited-edition-graphics-card-axrx-6800-16gbd6-2dhce-oc",
	"https://www.ebuyer.com/1134380-asus-radeon-rx-6800-16gb-rog-strix-oc-graphics-card-rog-strix-rx6800-o16g-gaming",
	"https://www.ebuyer.com/1134383-gigabyte-radeon-rx-6800-16gb-gaming-oc-graphics-card-gv-r68gaming-oc-16gd",
	"https://www.ebuyer.com/1137016-msi-radeon-rx-6800-gaming-x-trio-16gb-graphics-card-rx-6800-gaming-x-trio-16g",
	"https://www.ebuyer.com/1138499-asrock-radeon-rx-6800-16gb-graphics-card-radeon-rx-6800-16g",
	"https://www.ebuyer.com/1135768-asrock-radeon-rx-6800-challenger-pro-16gb-oc-graphics-rx6800-clp-16go",
	"https://www.ebuyer.com/1138788-gigabyte-radeon-rx-6800-16gb-aorus-master-graphics-card-gv-r68aorus-m-16gd",
]

[[products]]

name = "RX 580"

urls = [
	"https://www.ebuyer.com/788993-msi-amd-radeon-rx-580-8gb-armor-8g-oc-graphics-card-rx-580-armor-8g-oc",
]

[[products]]

name = "RX 550"

urls = [
	"https://www.ebuyer.com/974387-powercolor-radeon-rx-550-4gb-red-dragon-graphics-card-axrx-550-4gbd5-dh",
]

[[products]]

name = "3060"

urls = [
	"https://www.ebuyer.com/1142117-gigabyte-geforce-rtx-3060-12gb-gaming-oc-ampere-graphics-card-gv-n3060gaming-oc-12gd",
	"https://www.ebuyer.com/1142164-asus-geforce-rtx-3060-12gb-tuf-gaming-oc-ampere-graphics-card-tuf-rtx3060-o12g-gaming",
	"https://www.ebuyer.com/1139155-zotac-geforce-rtx-3060-12gb-amp-white-edition-ampere-graphics-card-zt-a30600f-10p",
	"https://www.ebuyer.com/1138915-pny-geforce-rtx-3060-12gb-uprising-edition-ampere-graphics-card-vcg306012dfmpb",
	"https://www.ebuyer.com/1140152-msi-geforce-rtx-3060-12gb-ventus-2x-oc-ampere-graphics-card-rtx-3060-ventus-2x-12g-oc",
	"https://www.ebuyer.com/1142118-gigabyte-geforce-rtx-3060-12gb-eagle-oc-ampere-graphics-card-gv-n3060eagle-oc-12gd",
	"https://www.ebuyer.com/1142162-asus-geforce-rtx-3060-12gb-rog-strix-oc-ampere-graphics-card-rog-strix-rtx3060-o12g-gaming",
	"https://www.ebuyer.com/1142168-asus-geforce-rtx-3060-12gb-dual-ampere-graphics-card-dual-rtx3060-12g",
	"https://www.ebuyer.com/1143088-evga-geforce-rtx-3060-12gb-xc-gaming-ampere-graphics-card-12g-p5-3657-kr",
	"https://www.ebuyer.com/1139157-zotac-geforce-rtx-3060-12gb-twin-edge-ampere-graphics-card-zt-a30600e-10m",
	"https://www.ebuyer.com/1140151-msi-geforce-rtx-3060-12gb-ventus-3x-oc-ampere-graphics-card-rtx-3060-ventus-3x-12g-oc",
	"https://www.ebuyer.com/1140154-msi-geforce-rtx-3060-12gb-ventus-2x-ampere-graphics-card-rtx-3060-ventus-2x-12g",
	"https://www.ebuyer.com/1141627-palit-geforce-rtx-3060-12gb-dual-ampere-graphics-card-ne63060019k9-190ad",
	"https://www.ebuyer.com/1139156-zotac-geforce-rtx-3060-12gb-twin-edge-oc-ampere-graphics-card-zt-a30600h-10m",
	"https://www.ebuyer.com/1140149-msi-geforce-rtx-3060-12gb-gaming-x-trio-ampere-graphics-card-rtx-3060-gaming-x-trio-12g",
	"https://www.ebuyer.com/1140150-msi-geforce-rtx-3060-12gb-gaming-x-ampere-graphics-card-rtx-3060-gaming-x-12g",
	"https://www.ebuyer.com/1140800-pny-geforce-rtx-3060-12gb-xlr8-gaming-revel-epic-x-single-fan-ampere-vcg306012sfxppb",
	"https://www.ebuyer.com/1141626-palit-geforce-rtx-3060-12gb-dual-oc-ampere-graphics-card-ne63060t19k9-190ad",
	"https://www.ebuyer.com/1142116-gigabyte-geforce-rtx-3060-12gb-vision-oc-ampere-graphics-card-gv-n3060vision-oc-12gd",
	"https://www.ebuyer.com/1142119-gigabyte-geforce-rtx-3060-12gb-eagle-ampere-graphics-card-gv-n3060eagle-12gd",
	"https://www.ebuyer.com/1142163-asus-geforce-rtx-3060-12gb-rog-strix-ampere-graphics-card-rog-strix-rtx3060-12g-gaming",
	"https://www.ebuyer.com/1142166-asus-geforce-rtx-3060-12gb-tuf-gaming-ampere-graphics-card-tuf-rtx3060-12g-gaming",
]

[[products]]

name = "3060 Ti"

urls = [
	"https://www.ebuyer.com/1133708-gigabyte-geforce-rtx-3060-ti-8gb-gaming-oc-pro-ampere-graphics-card-gv-n306tgamingoc-pro-8gd",
	"https://www.ebuyer.com/1136049-asus-geforce-rtx-3060-ti-8gb-gddr6-tuf-gaming-oc-ampere-graphics-tuf-rtx3060ti-o8g-gaming",
	"https://www.ebuyer.com/1129353-gigabyte-geforce-rtx-3060-ti-8gb-aorus-master-ampere-graphics-card-gv-n306taorus-m-8gd",
	"https://www.ebuyer.com/1129355-gigabyte-geforce-rtx-3060-ti-8gb-gaming-oc-ampere-graphics-card-gv-n306tgaming-oc-8gd",
	"https://www.ebuyer.com/1133705-gigabyte-geforce-rtx-3060-ti-8gb-eagle-oc-ampere-graphics-card-gv-n306teagle-oc-8gd",
	"https://www.ebuyer.com/1129488-zotac-geforce-rtx-3060-ti-8gb-twin-edge-ampere-graphics-card-zt-a30610e-10m",
	"https://www.ebuyer.com/1134235-palit-geforce-rtx-3060-ti-8gb-dual-oc-ampere-graphics-card-ne6306ts19p2-190ad",
	"https://www.ebuyer.com/1136048-asus-geforce-rtx-3060-ti-8gb-rog-strix-ampere-graphics-card-rog-strix-rtx3060ti-8g-gaming",
	"https://www.ebuyer.com/1136052-asus-geforce-rtx-3060-ti-8gb-gddr6-dual-ampere-graphics-card-dual-rtx3060ti-8g",
	"https://www.ebuyer.com/1139372-msi-geforce-rtx-3060-ti-8gb-gaming-x-ampere-graphics-card-rtx-3060-ti-gaming-x",
	"https://www.ebuyer.com/1139658-gigabyte-geforce-rtx-3060-ti-8gb-vision-oc-ampere-graphics-card-gv-n306tvision-oc-8gd",
	"https://www.ebuyer.com/1139775-evga-geforce-rtx-3060-ti-8gb-ftw3-ultra-ampere-graphics-card-08g-p5-3667-kr",
	"https://www.ebuyer.com/1129189-pny-geforce-rtx-3060-ti-8gb-xlr8-revel-epic-x-ampere-graphics-card-vcg3060t8dfxppb",
	"https://www.ebuyer.com/1133706-gigabyte-geforce-rtx-3060-ti-8gb-eagle-ampere-graphics-card-gv-n306teagle-8gd",
	"https://www.ebuyer.com/1134060-palit-geforce-rtx-3060-ti-8gb-gamingpro-oc-ampere-graphics-card-ne6306tt19p2-1041a",
	"https://www.ebuyer.com/1134069-msi-geforce-rtx-3060-ti-8gb-gaming-x-trio-ampere-graphics-card-rtx-3060-ti-gaming-x-trio",
	"https://www.ebuyer.com/1134070-msi-geforce-rtx-3060-ti-8gb-ventus-3x-oc-ampere-graphics-card-rtx-3060-ti-ventus-3x-oc",
	"https://www.ebuyer.com/1134236-palit-geforce-rtx-3060-ti-8gb-dual-ampere-graphics-card-ne6306t019p2-190ad",
	"https://www.ebuyer.com/1136050-asus-geforce-rtx-3060-ti-8gb-gddr6-tuf-gaming-ampere-graphics-card-tuf-rtx3060ti-8g-gaming",
	"https://www.ebuyer.com/1129487-zotac-geforce-rtx-3060-ti-8gb-twin-edge-oc-ampere-graphics-zt-a30610h-10m",
	"https://www.ebuyer.com/1134061-palit-geforce-rtx-3060-ti-8gb-gamingpro-ampere-graphics-card-ne6306t019p2-1041a",
	"https://www.ebuyer.com/1134071-msi-geforce-rtx-3060-ti-8gb-ventus-2x-oc-ampere-graphics-card-rtx-3060-ti-ventus-2x-oc",
	"https://www.ebuyer.com/1136047-asus-geforce-rtx-3060-ti-8gb-rog-strix-oc-ampere-graphics-card-rog-strix-rtx3060ti-o8g-gaming",
	"https://www.ebuyer.com/1136051-asus-geforce-rtx-3060-ti-8gb-gddr6-dual-oc-ampere-graphics-card-dual-rtx3060ti-o8g",
]

[[products]]

name = "AMD RX 5500XT"

urls = [
	"https://www.ebuyer.com/937200-msi-radeon-rx-5500-xt-gaming-x-8gb-graphics-card-rx-5500-xt-gaming-x-8g",
	"https://www.ebuyer.com/937375-asus-radeon-rx-5500-xt-dual-evo-oc-8gb-graphics-card-dual-rx5500xt-o8g-evo",
	"https://www.ebuyer.com/937387-sapphire-radeon-rx-5500-xt-pulse-8gb-graphics-card-11295-01-20g",
]

[[products]]

name = "AMD RX 5600XT"

urls = [
	"https://www.ebuyer.com/951044-msi-radeon-rx-5600-xt-mech-oc-6gb-14gbps-graphics-card-rx-5600-xt-mech-oc",
]

[[products]]

name = "GTX 1650"

urls = [
	"https://www.ebuyer.com/881982-gigabyte-geforce-gtx-1650-oc-4gb-gddr5-graphics-card-gv-n1650oc-4gd",
	"https://www.ebuyer.com/973418-palit-geforce-gtx-1650-4gb-gaming-pro-graphics-card-ne6165001bg1-1175a",
	"https://www.ebuyer.com/1135907-msi-geforce-gtx-1650-d6-ventus-xs-ocv2-4gb-graphics-card-gtx-1650-d6-ventus-xs-ocv2",
	"https://www.ebuyer.com/1138931-palit-geforce-gtx-1650-stormx-4gb-oc-graphics-card-ne61650u18g1-166f",
	"https://www.ebuyer.com/1139131-msi-geforce-gtx-1650-d6-aero-itx-oc-4gb-graphics-card-gtx-1650-d6-aero-itx-oc",
	"https://www.ebuyer.com/1142151-asus-geforce-gtx-1650-4gb-tuf-gaming-graphics-card-tuf-gtx1650-4gd6-p-gaming",
	"https://www.ebuyer.com/882051-msi-geforce-gtx-1650-gaming-x-4gb-gddr5-graphics-card-gtx-1650-gaming-x-4g",
	"https://www.ebuyer.com/973331-gigabyte-geforce-gtx-1650-4gb-d6-oc-graphics-card-gv-n1656oc-4gd",
	"https://www.ebuyer.com/992087-palit-geforce-gtx-1650-stormx-d6-4gb-graphics-card-ne61650018g1-166f",
	"https://www.ebuyer.com/1125375-pny-geforce-gtx-1650-4gb-gddr6-graphics-card-vcg16504d6dfppb",
	"https://www.ebuyer.com/1133812-asus-geforce-gtx-1650-mini-4gb-gddr6-graphics-card-dual-gtx1650-o4gd6-mini",
	"https://www.ebuyer.com/881983-gigabyte-geforce-gtx-1650-mini-itx-oc-4gb-gddr5-graphics-card-gv-n1650ixoc-4gd",
	"https://www.ebuyer.com/911286-msi-geforce-gtx-1650-oc-4gb-low-profile-graphics-card-gtx-1650-4gt-lp-oc",
	"https://www.ebuyer.com/1126289-msi-geforce-gtx-1650-ventus-xs-4gb-ocv1-graphics-card-gtx-1650-ventus-xs-4g-ocv1",
	"https://www.ebuyer.com/1126769-asus-geforce-gtx-1650-tuf-oc-4gb-graphics-card-tuf-gtx1650-o4gd6-p-gaming",
	"https://www.ebuyer.com/1138930-palit-geforce-gtx-1650-gaming-pro-4gb-oc-graphics-card-ne61650s1bg1-1175a",
	"https://www.ebuyer.com/1137493-palit-geforce-gtx-1650-4gb-gamingpro-graphics-card-ne6165001bg1-166a",
]

[[products]]

name = "GTX 1650 Super"

urls = [
	"https://www.ebuyer.com/921105-gigabyte-gtx-1650-super-oc-windforce-oc-4gb-graphics-card-gv-n165swf2oc-4gd",
	"https://www.ebuyer.com/921162-msi-geforce-gtx-1650-super-ventus-xs-oc-4gb-graphics-card-gtx-1650-super-ventus-xs-oc",
	"https://www.ebuyer.com/921091-palit-geforce-gtx-1650-super-stormx-4gb-graphics-card-ne6165s018g1-166f",
	"https://www.ebuyer.com/921154-asus-tuf-geforce-gtx-1650-super-4gb-oc-graphics-card-tuf-gtx1650s-o4g-gaming",
	"https://www.ebuyer.com/921161-msi-geforce-gtx-1650-super-gaming-x-4gb-graphics-card-gtx-1650-super-gaming-x",
	"https://www.ebuyer.com/921146-pny-geforce-gtx-1650-super-single-fan-graphics-card-vcg16504ssfppb",
	"https://www.ebuyer.com/921153-asus-geforce-gtx-1650-super-phoenix-oc-4gb-graphics-card-ph-gtx1650s-o4g",
	"https://www.ebuyer.com/921163-msi-geforce-gtx-1650-super-aero-itx-oc-4gb-graphics-card-gtx-1650-super-aero-itx-oc",
]

[[products]]

name = "GTX 1660"

urls = [
	"https://www.ebuyer.com/920484-zotac-geforce-gtx-1660-6gb-graphics-card-zt-t16600k-10m",
	"https://www.ebuyer.com/880055-gigabyte-geforce-gtx-1660-oc-6gb-gddr5-graphics-card-gv-n1660oc-6gd",
	"https://www.ebuyer.com/879572-msi-geforce-gtx-1660-ventus-xs-6gb-oc-gddr5-graphics-card-gtx-1660-ventus-xs-6g-oc",
	"https://www.ebuyer.com/879570-msi-geforce-gtx-1660-gaming-x-6gb-gddr5-graphics-card-gtx-1660-gaming-x-6g",
]

[[products]]

name = "GTX 1660 Super"

urls = [
	"https://www.ebuyer.com/914171-msi-geforce-gtx-1660-super-ventus-xs-6gb-oc-graphics-card-gtx-1660-super-ventus-xs-oc",
	"https://www.ebuyer.com/1142531-asus-geforce-gtx-rog-strix-advanced-1660-super-graphics-card-rog-strix-gtx1660s-a6g-gaming",
	"https://www.ebuyer.com/915241-gigabyte-geforce-gtx-1660-super-oc-6gb-graphics-card-gv-n166soc-6gd",
	"https://www.ebuyer.com/1142368-asus-geforce-gtx-1660-super-6gb-tuf-oc-graphics-card-tuf-gtx1660s-o6g-gaming",
	"https://www.ebuyer.com/919629-palit-geforce-gtx-1660-super-6gb-stormx-graphics-card-ne6166s018j9-161f",
	"https://www.ebuyer.com/912618-zotac-geforce-gtx-1660-super-6gb-amp-edition-graphics-card-zt-t16620d-10m",
	"https://www.ebuyer.com/919258-asus-geforce-gtx-1660-super-dual-evo-6gb-oc-graphics-card-dual-gtx1660s-o6g-evo",
	"https://www.ebuyer.com/1138061-asus-geforce-gtx-1660-super-rog-strix-6gb-oc-graphics-card-rog-strix-gtx1660s-o6g-gaming",
	"https://www.ebuyer.com/1138717-msi-geforce-gtx-1660-super-gaming-z-plus-6gb-graphics-card-gtx-1660-super-gaming-z-plus",
	"https://www.ebuyer.com/1139774-evga-geforce-gtx-1660-super-6gb-sc-ultra-graphics-card-06g-p4-1068-kr",
	"https://www.ebuyer.com/1139901-palit-geforce-gtx-1660-super-gamingpro-6gb-graphics-card-ne6166s018j9-1160a",
	"https://www.ebuyer.com/919631-palit-geforce-gtx-1660-super-gamingpro-oc-6gb-graphics-card-ne6166ss18j9-1160a",
	"https://www.ebuyer.com/919721-palit-geforce-gtx-1660-super-6gb-stormx-oc-graphics-card-ne6166ss18j9-161f",
	"https://www.ebuyer.com/1128362-kfa2-geforce-gtx-1660-super-6gb-oc-graphics-card-60srl7dsy91k",
	"https://www.ebuyer.com/1133815-asus-geforce-gtx-1660-super-mini-6gb-oc-graphics-card-dual-gtx1660s-o6g-mini",
	"https://www.ebuyer.com/915240-gigabyte-geforce-gtx-1660-super-6gb-oc-gaming-graphics-card-gv-n166sgaming-oc-6gd",
	"https://www.ebuyer.com/919160-msi-geforce-gtx-1660-super-gaming-x-6gb-graphics-card-gtx-1660-super-gaming-x",
	"https://www.ebuyer.com/919326-pny-geforce-gtx-1660-super-6gb-graphics-card-vcg16606ssfppb",
	"https://www.ebuyer.com/1129733-msi-geforce-gtx-1660-super-ventus-6gb-oc-graphics-card-gtx-1660-super-ventus-oc",
]

[[products]]

name = "GTX 1660 Ti"

urls = [
	"https://www.ebuyer.com/1138927-palit-geforce-gtx-1660ti-dual-graphics-card-ne6166t018j9-1160a",
	"https://www.ebuyer.com/877353-msi-geforce-gtx-1660-ti-ventus-xs-6gb-oc-graphics-card-gtx-1660-ti-ventus-xs-6g-oc",
]

[[products]]

name = "RTX 2060"

urls = [
	"https://www.ebuyer.com/874003-zotac-geforce-rtx-2060-amp-6gb-graphics-card-zt-t20600d-10m",
	"https://www.ebuyer.com/875113-palit-geforce-rtx-2060-stormx-6gb-graphics-card-ne62060018j9-161f",
	"https://www.ebuyer.com/874210-gigabyte-geforce-rtx-2060-oc-v2-6gb-graphics-card-gv-n2060oc-6gd-v2",
	"https://www.ebuyer.com/1141899-pny-geforce-rtx-2060-6gb-blower-graphics-card-vcg20606blmpb",
]

[[products]]

name = "RTX 2060 Super"

urls = [
	"https://www.ebuyer.com/901616-palit-geforce-rtx-2060-super-8gb-graphics-card-at-ebuyer-ne6206s018p2-1160a",
]

[[products]]

name = "RTX 3080"

urls = [
	"https://www.ebuyer.com/1121306-asus-geforce-rtx-3080-10gb-gddr6x-tuf-gaming-oc-ampere-graphics-card-tuf-rtx3080-o10g-gaming",
	"https://www.ebuyer.com/1121357-asus-geforce-rtx-3080-10gb-gddr6x-rog-strix-oc-ampere-graphics-card-rog-strix-rtx3080-o10g-gaming",
	"https://www.ebuyer.com/1125453-zotac-geforce-rtx-3080-10gb-gddr6x-trinity-oc-ampere-graphics-card-zt-a30800j-10p",
	"https://www.ebuyer.com/1121311-msi-geforce-rtx-3080-10gb-gddr6x-ventus-3x-oc-ampere-graphics-card-rtx-3080-ventus-3x-10g-oc",
	"https://www.ebuyer.com/1121314-zotac-geforce-rtx-3080-10gb-gddr6x-trinity-ampere-graphics-card-zt-a30800d-10p",
	"https://www.ebuyer.com/1128087-palit-geforce-rtx-3080-gamerock-oc-10gb-gddr6x-ampere-graphics-card-ned3080h19ia-1020g",
	"https://www.ebuyer.com/1128207-msi-geforce-rtx-3080-suprim-x-10gb-ampere-graphics-card-rtx-3080-suprim-x-10g",
	"https://www.ebuyer.com/1128214-gigabyte-geforce-rtx-3080-10gb-gddr6x-vision-oc-ampere-graphics-card-gv-n3080vision-oc-10gd",
	"https://www.ebuyer.com/1128361-kfa2-geforce-rtx-3080-10gb-gddr6x-sg-ampere-graphics-card-38nwm3md99nk",
	"https://www.ebuyer.com/1128751-gigabyte-geforce-rtx-3080-10gb-gddr6x-eagle-ampere-graphics-card-gv-n3080eagle-10gd",
	"https://www.ebuyer.com/1121308-gigabyte-geforce-rtx-3080-10gb-gddr6x-gaming-oc-ampere-graphics-card-gv-n3080gaming-oc-10gd",
	"https://www.ebuyer.com/1121358-asus-geforce-rtx-3080-10gb-gddr6x-rog-strix-ampere-graphics-card-rog-strix-rtx3080-10g-gaming",
	"https://www.ebuyer.com/1127888-gigabyte-geforce-rtx-3080-10gb-gddr6x-aorus-xtreme-ampere-graphics-card-gv-n3080aorus-x-10gd",
	"https://www.ebuyer.com/1140018-asus-geforce-rtx-3080-10gb-gddr6x-rog-strix-oc-white-ampere-graphics-rog-strix-rtx3080-o10g-white",
	"https://www.ebuyer.com/1121290-asus-geforce-rtx-3080-10gb-gddr6x-tuf-gaming-ampere-graphics-card-tuf-rtx3080-10g-gaming",
	"https://www.ebuyer.com/1121300-pny-geforce-rtx-3080-10gb-xlr8-gaming-triple-fan-ampere-graphics-card-vcg308010tfxppb",
	"https://www.ebuyer.com/1121309-gigabyte-geforce-rtx-3080-10gb-gddr6x-eagle-oc-ampere-graphics-card-gv-n3080eagle-oc-10gd",
	"https://www.ebuyer.com/1121310-msi-geforce-rtx-3080-10gb-gddr6x-gaming-x-trio-ampere-graphics-card-rtx-3080-gaming-x-trio-10g",
	"https://www.ebuyer.com/1128086-palit-geforce-rtx-3080-gamerock-10gb-gddr6x-ampere-graphics-card-ned3080u19ia-1020g",
	"https://www.ebuyer.com/1135883-evga-geforce-rtx-3080-10gb-xc3-ultra-gaming-ampere-graphics-card-10g-p5-3885-kr",
	"https://www.ebuyer.com/1136570-asus-geforce-rtx-3080-ekwb-10gb-ampere-graphics-card-rtx3080-10g-ek",
	"https://www.ebuyer.com/1137509-gigabyte-aorus-geforce-rtx-3080-gaming-box-external-graphics-card-gv-n3080ixeb-10gd",
	"https://www.ebuyer.com/1140930-gigabyte-geforce-rtx-3080-10gb-gddr6x-aorus-master-ampere-graphics-card-gv-n3080aorus-m-10gd-v2",
]
<file_sep>/main.go
package main

import (
	"flag"
	"fmt"
	"net/http"
	"os"
	"text/tabwriter"
	"time"

	"github.com/BurntSushi/toml"
	"github.com/PuerkitoBio/goquery"
	log "github.com/sirupsen/logrus"
)

type bot struct {
	DiscordURL  string `toml:"discordURL"`
	Stock       map[string]map[string]*gpu
	Products    []Product
	writer      *tabwriter.Writer
	lastChecked time.Time
	refresh     time.Duration
}

type Product struct {
	Name string
	URLS []string
}

type gpu struct {
	inStock bool
	url     string
}

func main() {
	welcome := flag.Bool("welcome", false, "send welcome message")
	flag.Parse()

	b := bot{
		Stock:   make(map[string]map[string]*gpu),
		refresh: 10 * time.Minute,
	}

	// Read config file.
	if _, err := toml.DecodeFile("./config.toml", &b); err != nil {
		log.Fatal(err)
	}

	b.writer = new(tabwriter.Writer)
	b.writer.Init(os.Stdout, 8, 8, 3, '\t', 0)

	var count int
	for _, prod := range b.Products {
		for _, _ = range prod.URLS {
			count++
		}
	}
	log.Infof("watching %d gpus", count)

	if *welcome {
		if err := b.startUp(count); err != nil {
			log.Error(err)
		}
	}

	b.checkStock()
	b.printSummary()
	b.lastChecked = time.Now()

	ticker := time.NewTicker(b.refresh)
	for {
		select {
		case <-ticker.C:
			// Update stock list.
			b.checkStock()
			b.printSummary()
			b.lastChecked = time.Now()
		}
	}

}

func (b *bot) printStatus() {
	fmt.Printf("\033[H\033[2J")
	fmt.Printf("\033[A")
	// fmt.Fprintf(b.writer, "%s\t%s\n\n", "GPU", "IN STOCK")

	for _, prod := range b.Products {
		fmt.Fprintf(b.writer, "%s\n\n", prod.Name)
		for name, gpu := range b.Stock[prod.Name] {
			fmt.Fprintf(b.writer, "%s\t%v\n", name, gpu.inStock)
		}
		fmt.Fprintf(b.writer, "\n\n")
	}
	fmt.Fprintf(b.writer, "Last checked: %v", b.lastChecked.Format("Mon Jan 2 15:04:05 MST 2006"))

	b.writer.Flush()
}

func (b *bot) printSummary() {
	for _, prod := range b.Products {
		var count int
		for _, gpu := range b.Stock[prod.Name] {
			if gpu.inStock {
				count++
			}
		}
		log.Infof("%s: %d", prod.Name, count)
	}
}

func (b *bot) checkStock() {
	for _, prod := range b.Products {
		stock, ok := b.Stock[prod.Name]
		if !ok {
			stock = make(map[string]*gpu)
			b.Stock[prod.Name] = stock
		}

		for _, u := range prod.URLS {
			doc, err := getDoc(u)
			if err != nil {
				continue
			}

			name := getName(doc)

			inStock, err := inStock(doc)
			if err != nil {
				log.Error(err)
				continue
			}

			if g, ok := stock[name]; ok {
				if inStock && !g.inStock {
					// Send notification that item has come into stock.
					g.inStock = inStock
					fmt.Printf("%s is now in stock: %s\n", prod.Name, u)
					if err := b.sendDiscord(name, u, prod.Name); err != nil {
						log.Error(err)
					}
				}
				if !inStock && g.inStock {
					// Send notification that item has come into stock.
					g.inStock = inStock
					fmt.Printf("%s is out of stock: %s\n", prod.Name, u)
					if err := b.outOfStock(name, u, prod.Name); err != nil {
						log.Error(err)
					}
				}
			} else {
				stock[name] = &gpu{inStock: inStock, url: u}
				/*if inStock {
					fmt.Printf("%s is in stock: %s\n", prod.Name, u)
					if err := b.sendDiscord(name, u, prod.Name); err != nil {
						log.Error(err)
					}
				}*/
			}
		}
	}
}

/*func (b *bot) sendUpdate(gpu string, url string) {
	attachment := slack.Attachment{
		Color:      "good",
		AuthorName: gpu,
		AuthorLink: url,
		AuthorIcon: "https://avatars2.githubusercontent.com/u/652790",
		Text:       "This GPU is now in stock :smile",
		FooterIcon: "https://platform.slack-edge.com/img/default_application_icon.png",
		Ts:         json.Number(strconv.FormatInt(time.Now().Unix(), 10)),
	}
	msg := slack.WebhookMessage{
		Attachments: []slack.Attachment{attachment},
	}

	err := slack.PostWebhook(webhookURL, &msg)
	if err != nil {
		fmt.Println(err)
	}
}*/

func getDoc(url string) (*goquery.Document, error) {
	// Get the HTML
	resp, err := http.Get(url)
	if err != nil {
		return nil, err
	}

	// Convert HTML into goquery document
	doc, err := goquery.NewDocumentFromReader(resp.Body)
	if err != nil {
		return nil, err
	}
	return doc, nil
}

func getName(doc *goquery.Document) string {
	sel := doc.Find(".product-hero__title")
	return sel.Text()
}

func getModel(doc *goquery.Document) string {
	sel := doc.Find(".product-hero__key-selling-point")
	return sel.Text()
}

func getPic(doc *goquery.Document) string {
	sel := doc.Find(".image-gallery__hero .js-gallery-trigger")
	for _, n := range sel.Nodes {
		if n.FirstChild != nil {
			fmt.Println(*n.FirstChild)
		}
	}
	return ""
}

func inStock(doc *goquery.Document) (bool, error) {
	sel := doc.Find(".purchase-info__price .inc-vat .price")
	if len(sel.Nodes) == 0 {
		return false, nil
	}

	/*sel.Each(func(i int, s *goquery.Selection) {
		fmt.Println(strings.TrimSpace(s.Text()))
	})*/

	return true, nil
}
<file_sep>/go.mod
module go-bot

go 1.16

require (
	github.com/BurntSushi/toml v0.3.1 // indirect
	github.com/PuerkitoBio/goquery v1.6.1 // indirect
	github.com/bwmarrin/discordgo v0.23.2 // indirect
	github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect
	github.com/sirupsen/logrus v1.8.1 // indirect
	github.com/slack-go/slack v0.8.1 // indirect
	github.com/stretchr/objx v0.1.1 // indirect
)
<file_sep>/discord.go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"

	"github.com/bwmarrin/discordgo"
)

const (
	ebuyerAvatar = "https://media.glassdoor.com/sqll/764749/ebuyer-squarelogo-1396431281679.png"
)

func (b *bot) startUp(num int) error {
	hook := discordgo.WebhookParams{
		Content: fmt.Sprintf("GPU stock bot is live! Watching %d GPU's.", num),
	}
	reqBody, err := json.Marshal(hook)
	if err != nil {
		return err
	}

	_, err = http.Post(b.DiscordURL, "application/json", bytes.NewBuffer(reqBody))
	return err
}

func (b *bot) sendDiscord(gpu, url, model string) error {
	embed := &discordgo.MessageEmbed{
		URL:    url,
		Author: &discordgo.MessageEmbedAuthor{Name: "eBuyer", IconURL: ebuyerAvatar, ProxyIconURL: ebuyerAvatar, URL: url},
		Title:  gpu,
		Color:  39219,
	}

	hook := discordgo.WebhookParams{
		Content: fmt.Sprintf("%s now in stock!", model),
		Embeds:  []*discordgo.MessageEmbed{embed},
	}
	reqBody, err := json.Marshal(hook)
	if err != nil {
		return err
	}

	_, err = http.Post(b.DiscordURL, "application/json", bytes.NewBuffer(reqBody))
	return err
}

func (b *bot) outOfStock(gpu, url, model string) error {
	embed := &discordgo.MessageEmbed{
		URL:    url,
		Author: &discordgo.MessageEmbedAuthor{Name: "eBuyer", IconURL: ebuyerAvatar, ProxyIconURL: ebuyerAvatar, URL: url},
		Title:  gpu,
		Color:  13369344,
	}

	hook := discordgo.WebhookParams{
		Content: fmt.Sprintf("%s now out of stock :rage:", model),
		Embeds:  []*discordgo.MessageEmbed{embed},
	}
	reqBody, err := json.Marshal(hook)
	if err != nil {
		return err
	}

	_, err = http.Post(b.DiscordURL, "application/json", bytes.NewBuffer(reqBody))
	return err
}
